같은 이름의 메서드를 여러개 가지면서 매개변수의 유형과 갯수를 다르게 하는 메소드 만드는 방법
-> 매개변수의 시그니쳐가 다르면된다.
시그니쳐?
매개변수의 타입, 갯수, 순서를 말함. 컴파일러가 이를 기준으로 메소드를 구분하기 때문에 따로 묶어서 시그니쳐라는 이름을 붙인듯 하다.?
만약에 오버로딩된 똑같은 이름의 클래스가 1000개 있고, 그것 중 필요한 것을 쓸 때 찾는 데에 속도가 많이 느려질까?
컴파일할떄 컴파일러가 내부적으로는 사실 그 똑같은 이름의 클래스들을 바꾼다.
그렇기 때문에 실제로 호출할때, 하나하나 검색해서 찾는게 아니라 매개변수에 따라 새로 붙여진 이름으로 필요한 메소드를 바로 찾는다 (정적 바인딩)
정적 바인딩:
컴파일 시점에서 호출될 메소드가 이미 결정되어 있는 바인딩
그래서 속도와 관계가 없다
public class OverLoad {
//동작으로만 이루어진 객체
public void hap(int a, int b) {
System.out.println(a+b);
}
public void hap(float a, int b) {
System.out.println(a+b);
}
public void hap(float a, float b) {
System.out.println(a+b);
}
}
public class TPC16 {
public static void main(String[] args) {
OverLoad ov = new OverLoad();
ov.hap(20, 50); // hap_int_int
ov.hap(20f, 50); // hap_float_int
ov.hap(20f, 50f); // hap_float_float
}
}