네, C++에서는 네임스페이스(namespace)를 중첩할 수 있습니다. 하나의 네임스페이스 안에 또 다른 네임스페이스를 정의하면, 관련된 코드들을 계층적으로 그룹화하여 더 체계적인 구조를 만들 수 있습니다.
중첩 네임스페이스 문법
네임스페이스 내부에 다른 네임스페이스를 정의하는 기본 문법은 다음과 같습니다.
namespace namespace_name1 {
// 코드 선언
namespace namespace_name2 {
// 코드 선언
}
}중첩 네임스페이스 멤버에 접근하기
중첩된 네임스페이스의 멤버에 접근할 때는 범위 해결 연산자(scope resolution operator, ::)를 사용합니다.
// namespace_name2의 멤버에 접근 using namespace namespace_name1::namespace_name2; // namespace_name1의 멤버에 접근 using namespace namespace_name1;
실전 예제
아래 예제는 두 개의 네임스페이스를 중첩하여 정의하고, 내부 네임스페이스의 함수를 호출하는 방법을 보여줍니다.
#include <iostream>
using namespace std;
// 첫 번째 네임스페이스
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
// 두 번째(중첩된) 네임스페이스
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
}
using namespace first_space::second_space;
int main () {
// second_space의 함수가 호출됩니다.
func();
return 0;
}실행 결과
Inside second_space
코드 설명
이 예제에서 주목할 점은 다음과 같습니다.
first_space와 second_space 모두 같은 이름의 함수 func()를 가지고 있습니다. 하지만 using namespace first_space::second_space; 구문으로 내부 네임스페이스를 지정했기 때문에, main() 함수에서 호출한 func()는 second_space에 정의된 함수가 실행됩니다.
만약 외부 네임스페이스인 first_space의 함수를 호출하고 싶다면, using namespace first_space;로 선언을 변경하거나 first_space::func();처럼 직접 경로를 명시하면 됩니다.
정리
중첩 네임스페이스는 대규모 프로젝트에서 코드 충돌을 방지하고 모듈별로 논리적인 구조를 유지하는 데 매우 유용합니다. 특히 라이브러리 개발 시 세부 기능을 계층적으로 분류할 때 자주 활용됩니다.