네임스페이스, 클래스, enum, 인터페이스, 타입 별칭, 함수, 변수는 같은 이름으로 여러 번 선언할 수 있는 것이 있고, 없는 것이 있습니다. 인터페이스나 네임스페이스는 같은 이름으로 여러 개 존재할 때 병합되고, 여러 번 선언할 수 있는 대표적인 예입니다. 함수는 오버로딩되므로 여러 번 선언할 수 있습니다.
이를 표로 정리해보았습니다.
▼ 표 2-5 같은 이름의 다른 선언과 병합 가능 여부
병합 가능 여부 |
네임스페이스 |
클래스 |
enum |
인터페이스 |
타입 별칭 |
함수 |
변수 |
네임스페이스 |
O |
O |
O |
O |
O |
O |
O |
클래스 |
O |
X |
X |
O |
X |
O |
X |
enum |
O |
X |
O |
X |
X |
X |
X |
인터페이스 |
O |
O |
X |
O |
X |
O |
O |
타입 별칭 |
O |
X |
X |
X |
X |
O |
O |
함수 |
O |
O |
X |
O |
O |
O |
X |
변수 |
O |
X |
X |
O |
O |
X |
X |
이 표를 외우기는 쉽지 않습니다. 따라서 인터페이스, 네임스페이스 병합이나 함수 오버로딩 같이 널리 알려진 경우를 제외하고는 웬만하면 같은 이름으로 여러 번 선언하지 않는 것이 좋습니다.