C++시작과 문법

네임스페이스와 using

이름 충돌을 줄이고 코드를 논리적으로 묶는 `namespace`, `using` 기본 규칙을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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;를 습관적으로 모든 파일에 넣으면 짧게는 편해 보여도, 프로젝트가 커질수록 이름 충돌과 가독성 문제를 키울 수 있습니다.