📌 학습 목차
30. 오버로딩
31. 오버로딩 예제
30. 오버로딩
오버로딩(overloading):
한 클래스 내에 메서드 이름은 같으나 매개 변수의 타입, 개수, 순서가 다른 새로운 메서드를 여러 개 선언하는 것(new)
예시) println 메서드의 경우, 매개 변수로 넘겨주는 값의 타입에 따라 오버로딩된 메서드 중 하나가 실행됨
•하나의 메서드 이름에 여러 개의 메서드가 정의되어 있다는 점에서 과적합(overload)을 의미함
•오버로딩의 성립 조건은 메서드 이름이 같을 때 매개 변수의 타입, 개수, 순서 중 하나라도 달라야 하며, 반환 타입은 영향을 미치지 않음
•매개 변수의 순서만 달리해 오버로딩을 구현할 경우 사용자가 매개 변수의 순서를 외울 필요가 없다는 장점이 있지만,
모호한 메서드 호출로 인해 에러가 발생할 수 있음
📌 // 1) 매개 변수 이름이 다를 경우
int add(int x, int y) { return x + y; }
int add(int a, int b) { return x + y; }
📌 // 2) 반환 타입이 다른 경우
int add(int x, int y) { return x + y; }
long add(int x, int y) { return x + y; }
📌 // 3) 매개 변수 순서가 다를 경우
long add(int x, long y) { return x + y; }
long add(long x, int x) { return x + y; }
1) 매개 변수 이름이 다를 경우
•매개 변수의 이름만 다를 뿐 매개 변수의 타입, 개수, 순서가 같아 중복 정의로 인해 오버로딩이 성립되지 않음
2) 반환 타입이 다른 경우
•반환 타입은 오버로딩 구현에 영향을 미치지 않으며,
매개 변수의 타입, 개수, 순서가 같아 중복 정의로 인해 오버로딩이 성립되지 않음
3) 매개 변수 순서가 다를 경우
•매개 변수의 순서가 달라 메서드 호출 시 서로 다른 메서드로 구분될 수 있으므로 오버로딩이 성립됨
단, add(3, 3)와 같이 모호한 호출로 인해 두 add 메서드 중 어떤 메서드를 호출해야 할지 모르는 불분명한 경우 에러가 발생함
31. 오버로딩 예제
•메서드의 작업 내용을 동사로 표현하는 메서드 이름의 특징을 고려할 때,
오버로딩은 매개 변수는 다르지만 메서드 간에 같은 의미의 작업을 실행하기 위함임을 알 수 있음
📌 // 다양한 오버로딩 예제
package chap_06;
class MathExample4 {
int add(int x, int y) { return x + y; }
long add(int x, long y) { return x + y; }
long add(long x, int y) { return x + y; }
long add(long x, long y) { return x + y; }
int add(int[] x) {
int result = 0;
for (int i = 0; i < x.length; i++) {
result += x[i];
}
return result;
}
}
public class _31_Example {
public static void main(String[] args) {
MathExample4 m = new MathExample4();
System.out.println(m.add(3, 3)); // 6
System.out.println(m.add(3, 3L)); // 6
System.out.println(m.add(3L, 3)); // 6
System.out.println(m.add(3L, 3L)); // 6
int[] x = {1, 2, 3, 4, 5};
System.out.println(m.add(x)); // 15
}
}
Reference
[남궁성의 정석코딩] Java의 정석 기초편 강의
[도우출판] Java의 정석 기초편 / 기본편