overload rules

이름이 같아도 매개변수 목록이 다르면 오버로딩이다

컴파일러가 호출문만 보고 후보를 고를 수 있어야 하므로, 구분 기준은 반드시 인자 목록에 드러나야 합니다.

차이예시판정
개수add(int, int)
add(int, int, int)
가능
타입add(int, int)
add(double, double)
가능
순서print(string, int)
print(int, string)
가능
반환 타입만int add(int, int)
double add(int, int)
불가
호출자는 반환 타입을 쓰지 않는다

add(1, 2)만으로는 어떤 반환 타입을 기대하는지 알 수 없습니다.

매개변수 이름은 기준이 아니다

타입과 순서가 같다면 이름만 바꿔도 같은 함수 모양입니다.

목표는 예측 가능성

한 호출문이 어느 함수로 갈지 독자가 바로 예상할 수 있어야 합니다.

주의: 반환 타입만 다르게 만든 함수는 호출 지점에서 구분할 정보가 없어 오버로딩으로 인정되지 않습니다.