static int add(int i, int j) {
return i + j;
}
static int add(int i, int j, int k) {
return i + j + k;
}
public static void main(String[] args) {
int i = Add(1, 2);
int j = Add(1, 2, 3);
System.out.println(i + j);
}
같은 이름의 메소드여도, 파라미터 개수에 맞는 메소드로 실행된다.
만약 파라미터 개수가 같은데, 서로 타입이 다르다면 파라미터 타입이 같은 메소드로 실행된다.
=> 이를 메소드 오버로딩이라고 한다. 이는 다형성 중 하나의 방법이다.
정적 바인딩 : 컴파일 타이밍에 로딩 다 됨.
얼리 바인딩(메소드 오버로딩) VS 레이트 바인딩(메소드 오버라이딩)
컴파일러는 시그너처를 사용하여 클래스의 메소드를 구분합니다. 각 클래스에서 각 메소드의 시그너처는 유일해야 합니다.
메소드 시그너처는 메소드의 이름, 파라미터의 타입, 파라미터의 개수로 구성됩니다.
static int doSomething (int n) {
}
static String doSomething (int n) {
}
메소드 시그너처는 return 타입을 포함하지 않습니다. 위 두 메소드는 같은 시그너처로 판단되어 컴파일시에 오류를 출력합니다.
public class Greetings {
enum TimeOfDay {Morning, Afternoon, Evening}
static void greet() {
System.out.println("Hello");
}
static void greet(String name) {
System.out.println("Hello " + name);
}
static void greet(String name, TimeOfDay timeOfDay) {
String message = "";
switch(timeOfDay) {
case Morning:
message = "Good morning, ";
break;
case Afternoon:
message = "Good Afternoon, ";
break;
case Evening:
message = "Good evening";
break;
}
System.out.println(message + name);
}
public static void main(String[] args) {
greet();
greet("Kitty");
greet("Crab", TimeOfDay.Morning);
}
}
디버깅과 유지 보수가 어려움