[작성일: 2023. 01. 25]
오버로딩(Overloading)
- 한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
- 메서드 : 메서드 이름 = n : 1
ex) println(매개변수)
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
오버로딩이 성립하기 위한 조건
- 메서드 이름이 같아야 함.
- 매개변수의 개수 또는 타입이 달라야 함.
- 반환 타입은 영향없음.
ex 1)
int add(int a, int b) { return a + b; }
int add(int x, int y) { return x + y; }
// 메서드 이름 같음 - O
// 매개변수의 개수가 같지만 타입도 같음 - X
// 반환 타입은 같지만 반환 타입은 영향 없음 - O
// 오버로딩 조건이 성립하지 않으므로 1 예시는 오버로딩이 아님.
// 그냥 메서드 중복 정의
ex 2)
int add(int a, int b) { return a + b; }
long add(int a, int b) { return (long)(a + b); }
// 메서드 이름이 같음 - O
// 매개변수의 개수가 같지만 타입도 같음- X
// 반환 타입은 다르지만 반환 타입은 영향 없음 - O
// 오버로딩 조건이 성립하지 않으므로 2 예시는 오버로딩이 아님.
// 그냥 메서드 중복 정의
ex 3)
long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }
// 메서드 이름이 같음 - O
// 매개변수의 개수가 같지만 타입은 다름 - O
// 반환 타입은 같지만 반환 타입은 영향 없음 - O
// 오버로딩 조건 성립
⬇
** add(3, 3); 으로 호출할 경우 컴퓨터가 읽을 수 없으므로
add(3L, 3); 과 같은 형식으로 호출해야 함.
(메서드)오버로딩의 올바른 예
- 메서드 이름은 add로 전부 같고, 매개변수는 다르지만 같은 의미의 기능 수행
- 메서드 이름은 대부분 동사 (작업을 수행함.)
- 이름이 같다 = 하는 작업이 같다.
class Ex6_10 {
public static void main(String[] args) {
MyMath3 mm = new MyMath();
System.out.println("mm.add(3, 3) 결과: " + mm.add(3, 3));
System.out.println("mm.add(3L, 3) 결과: " + mm.add(3L, 3));
System.out.println("mm.add(3, 3L) 결과: " + mm.add(3, 3L));
System.out.println("mm.add(3L, 3L) 결과: " + mm.add(3L, 3L));
int[] a = {100, 200, 300};
System.out.println("mm.add(a) 결과: " + mm.add(a));
}
}
class MyMath3 {
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a + b;
}
long add(long a, long b) {
System.out.print("long add(long a, long b) - ");
int add(int[] a) { // 배열의 모든 요소의 합을 결과로 돌려줌.
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length; i++) {
result += a[i];
return result;
}
}
⬇
int add(int a, int b) - mm.add(3, 3) 결과: 6
long add(long a, int b) - mm.add(3L, 3) 결과: 6
long add(int a, long b) - mm.add(3, 3L) 결과: 6
long add(long a, long b) - mm.add(3L, 3L) 결과: 6
int add(int[]a) - mm.add(a) 결과: 600
// mm.add 메서드가 먼저 호출되고 결과를 얻은 후 println()이 호출됨
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.