Java 메소드 오버로딩
오버로딩은 다음 요구사항이 있을 때 유용하게 사용할 수 있다.
- 메소드 add 이름으로 두 수를 더하기
- 메소드 add 이름으로 세 수를 더하기
- 메소드 add 이름으로 int형으로 반환되어야 한다.
오버로딩
메소드 add
이름으로 여러 개 정의한 다음,
파라미터를 다르게 하는 것을 메소드 Overloading
이라 한다.
public static int add(int x, int y) { return x + y; }
public static int add(double x, double y) { return x + y; }
public static int add(int x, int y, int z) { return x + y + z; }
- 같은 이름이라도 여러 개 메소드를 정의할 수 있다.
규칙
- 메소드의 이름이 같아야한다.
- 파라미터의 갯수가 다른 경우에도 오버로딩을 사용할 수 있다.
- 파라미터의 타입이 다른 경우에도 오버로딩을 사용할 수 있다.
단, 파라미터의 갯수와 타입이 같고, 반환타입만 다르게 주어진 경우 오버로딩 되지 않는다.
오버로딩 실패 케이스
public static void add(int x, int y) {}
public static int add(int x, int y) {return 0;}
java: method add(int,int) is already defined in class core.Add
- 반환 타입만 다르게 주어진 경우 동일한 이름, 파라미터가 있다는 이유로 컴파일 오류가 발생한다.
메소드 시그니쳐
메소드 시그니쳐는 메소드를 정의한 경우 메소드만의 고유한 시그니쳐를 부여한다. 시그니쳐를 생성하는 규칙은 다음과 같다
- 메소드 이름 + 파라미터(타입 또는 개수)
앞에서 설명한 오버로딩 실패 코드 또한,
메소드 시그니쳐가 같기 때문에 (동일한 이름 + 파라미터) 오류가 발생한 것이다.
메소드 코드 작성하기
public class Logical1 {
public static void main(String[] args) {
int num1 = add(10,20);
int num2 = add(10,20, 30);
int num3 = add(10.6,20.3);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
}
public static int add(int x, int y) {
System.out.println("1번 int, int 호출");
return x + y;
}
public static int add(int x, int y, int z) {
System.out.println("2번 int, int, int 호출");
return x + y + z;
}
public static int add(double x, double y) {
System.out.println("3번 double, double 호출");
return (int) (x + y);
}
}
Java 출력
1번 int, int 호출
2번 int, int, int 호출
3번 double, double 호출
num1 = 30
num2 = 60
num3 = 30
- 인수 타입에 따라 정의한 메소드 찾아주는 것을 확인할 수 있다.
- 리터럴 값 int형
(10, 20)
주어진 경우, 1번 메소드를 호출하였다 - 리터럴 값 int형
(10, 20, 30)
주어진 경우, 2번 메소드를 호출하였다 - 리터럴 값 double형
(10.6, 20.3)
주어진 경우, 3번 메소드를 호출하였다