Overload Design

함수 오버로딩 기준

오버로딩은 이름을 공유하는 기능입니다. 컴파일러가 고를 단서는 반환 타입이 아니라 매개변수 목록에 있어야 합니다.

이름 같은 개념의 작업
구분 개수, 타입, 순서 차이
금지 반환 타입만 다르게 정의
OK

타입이 다른 경우

`add(int, int)`와 `add(double, double)`처럼 인자 타입으로 의미가 구분되면 오버로딩 후보입니다.

OK

개수가 다른 경우

두 수와 세 수를 더하는 함수처럼 같은 동작의 입력 규모가 달라질 때 자연스럽습니다.

오버로드 모호성

기본 인자와 섞는 경우

생략된 인자가 다른 오버로드와 같은 호출 모양을 만들면 모호성이 생깁니다.

오버로드 해석 경로

컴파일러가 후보를 고르는 순서

1

이름으로 모음

같은 함수 이름을 가진 선언을 후보로 모읍니다.

2

인자와 비교

타입, 개수, 순서가 호출문과 맞는지 확인합니다.

3

가장 좋은 일치

정확한 일치가 형 변환보다 우선합니다.

4

모호하면 오류

동급 후보가 둘 이상이면 호출을 결정할 수 없습니다.