좋은 오버로딩은 편리함보다 예측 가능성이 먼저다
오버로딩을 늘릴수록 후보 집합이 커지므로, 호출자가 어떤 함수가 선택될지 쉽게 예상할 수 있게 설계해야 합니다.
같은 개념만 같은 이름
덧셈, 출력처럼 하나의 의미 계열일 때만 이름을 공유합니다.
매개변수 목록으로 구분
개수, 타입, 순서가 호출문에서 명확히 드러나야 합니다.
암시 변환 줄이기
0, nullptr, 문자 리터럴처럼 여러 타입으로 갈 수 있는 인자를 조심합니다.
기본 인자와 겹침 점검
기본값 때문에 두 오버로드가 같은 호출 형태를 만들지 확인합니다.
반환 타입만으로 구분 금지
호출식은 반환 타입을 기준으로 후보를 고르지 못합니다.
의미가 다르면 이름 분리
타입만 다르고 동작 의미가 크면 별도 함수 이름이 더 읽기 쉽습니다.
애매한 호출을 의도적으로 막는 예
void open(const char* path);
void open(filesystem::path path);
이런 후보가 함께 있으면 nullptr이나 문자열 인자의 선택 경로를 명확히 점검해야 합니다.
핵심: 후보를 많이 만드는 것보다, 호출 하나가 함수 하나로 분명히 좁혀지는 것이 더 좋은 오버로딩입니다.