함수 오버로딩

오버로딩 매개변수 계약

함수 이름은 같아도 매개변수 개수나 타입이 다르면 컴파일러가 호출에 맞는 후보를 고릅니다.

시그니처

매개변수 목록으로 구분

이름과 매개변수 타입, 개수, 순서가 후보 구분의 핵심입니다.

print(int)
해석

가장 잘 맞는 후보 선택

컴파일러는 호출 인자와 매개변수 사이의 변환 비용을 비교합니다.

print(3.14)
모호성

동등한 후보가 있으면 오류

두 변환이 비슷하게 가능하면 어떤 함수를 부를지 결정하지 못합니다.

ambiguous
맹글링

링커용 이름을 다르게 만듦

컴파일러는 매개변수 정보를 반영한 내부 이름으로 오버로드를 구분합니다.

name mangling
의미 일관성같은 이름의 오버로드는 같은 개념의 동작을 해야 합니다.
변환 비용int, double, char 조합은 예상과 다른 후보가 선택될 수 있습니다.
main 제외프로그램 진입점인 main 함수는 오버로딩 대상이 아닙니다.