대규모 프로젝트에서 명칭 중복으로 인한 충돌을 방지하기 위해 네임스페이스(Namespace)를 활용한다.
코드를 논리적인 그룹으로 격리하여 관리하는 체계적인 방식이다.
네임스페이스 정의 및 사용
namespace 키워드를 사용하여 영역을 구분하고, 범위 지정 연산자(::)를 통해 접근한다.
#include <iostream>
namespace Graphic {
void Draw() { std::cout << "Drawing Graphic" << std::endl; }
}
namespace Physics {
void Draw() { std::cout << "Drawing Physics Debug" << std::endl; }
}
int main() {
// 동일한 이름의 함수라도 네임스페이스로 구분 가능
Graphic::Draw();
Physics::Draw();
return 0;
}
using 선언과 지시어
네임스페이스 이름을 매번 쓰는 번거로움을 줄이기 위해 using을 사용한다.
// 1. using 선언: 특정 요소만 가져오기
using std::cout;
using std::endl;
// 2. using 지시어: 네임스페이스 전체 가져오기
using namespace Graphic;
int main() {
cout << "Hello" << endl; // std:: 생략 가능
Draw(); // Graphic:: 생략 가능
return 0;
}
중첩 네임스페이스와 별칭
네임스페이스 내부에 또 다른 네임스페이스를 정의하거나, 긴 경로에 별칭을 붙일 수 있다.
namespace Company::Project::Module {
int value = 100;
}
// 별칭(Alias) 설정
namespace MyMod = Company::Project::Module;
int main() {
int x = MyMod::value;
return 0;
}
P.S
네임스페이스는 코드의 소속을 명확히 정의하여 대규모 협업 시 발생할 수 있는 이름 충돌 문제를 원천 차단한다.
표준 라이브러리(std)를 포함하여 모든 라이브러리가 이 체계를 기반으로 설계되어 있는 것 같다.