기본 패턴
cpp
namespace math {
int add(int a, int b) {
return a + b;
}
}
using math::add;설명
- 네임스페이스는 함수, 클래스, 상수 이름을 논리적인 그룹 안에 묶어 이름 충돌을 줄이는 도구입니다.
std::cout처럼::로 qualified name을 쓰면 어떤 네임스페이스의 이름인지 명확하게 드러납니다.using math::add;는 특정 이름 하나만 현재 scope로 가져오고,using namespace math;는 더 넓게 가져오므로 영향 범위가 큽니다.- 헤더 파일에서는
using namespace ...를 무심코 넣지 않는 편이 안전합니다. 포함하는 모든 코드에 이름 오염이 전파될 수 있기 때문입니다. - 큰 프로젝트일수록 "어떤 이름이 어디에 속하는가"를 분명하게 하는 것이 유지보수에 직접적인 도움이 됩니다.
짧은 예제
cpp
#include <iostream>
namespace app {
void printVersion() {
std::cout << "1.0.0\n";
}
}
int main() {
app::printVersion();
}빠른 정리
| 항목 | 설명 |
|---|---|
namespace name { ... } | 이름들을 하나의 그룹으로 묶음 |
name::value | 특정 네임스페이스의 이름을 명시적으로 사용 |
using ns::name; | 필요한 이름 하나만 가져옴 |
using namespace ns; | 네임스페이스 전체를 가져오므로 영향 범위가 큼 |
| 헤더 주의 | 넓은 using은 포함하는 쪽 코드에 충돌을 만들 수 있음 |
주의할 점
using namespace std;를 습관적으로 모든 파일에 넣으면 짧게는 편해 보여도, 프로젝트가 커질수록 이름 충돌과 가독성 문제를 키울 수 있습니다.