이름이 같아도 매개변수 목록이 다르면 오버로딩이다
컴파일러가 호출문만 보고 후보를 고를 수 있어야 하므로, 구분 기준은 반드시 인자 목록에 드러나야 합니다.
| 차이 | 예시 | 판정 |
|---|---|---|
| 개수 | 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)만으로는 어떤 반환 타입을 기대하는지 알 수 없습니다.
매개변수 이름은 기준이 아니다
타입과 순서가 같다면 이름만 바꿔도 같은 함수 모양입니다.
목표는 예측 가능성
한 호출문이 어느 함수로 갈지 독자가 바로 예상할 수 있어야 합니다.
주의: 반환 타입만 다르게 만든 함수는 호출 지점에서 구분할 정보가 없어 오버로딩으로 인정되지 않습니다.