C++

[C++] 이름 공간

hanseongbugi 2024. 12. 16. 10:24

namespace

  • 이름 공간은 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것
  • 코드의 크기가 늘어나고, 다른 사람의 코드를 쓰는 경우가 많아지고 있음
    • 중복된 이름을 가진 코드가 많아짐
  • c++에서는 이를 구분
    • 같은 이름이라도 소속된 이름 공간이 다르면 다른 것으로 취급
  • std::cout
    • 위의 경우 std라는 이름 공간에 정의된 cout을 의미

이름 공간 정의 방법

// Header1.h
namespace Header1 {
    int foo();
    void bar();
}
// Header2.h
namespace Header2 {
    int foo();
    void bar();
}
  • 위 코드에서 Header1에 있는 foo는 Header1이라는 이름 공간에 foo가 된다.
  • Header2에 있는 foo의 경우 Header2라는 이름 공간에 foo가 된다.
  • 자기 자식이 포함되어 있는 이름 공간 안에서는 굳이 앞에 이름 공간을 명시하지 않고 자유롭게 부를 수 있음
#include "Header1.h"

namespace Header1 {
    int func()
    {
        foo(); // 알아서 Header1::foo()가 실행
    }
} // end of Header1
  • Header1 이름 공간안에서 foo를 부른다면 알아서 Header1::foo()를 호출한다.
  • 또한, Header1 이름 공간안에서 Header2의 foo를 호출할 수 있다.
#include "Header1.h"
#include "Header2.h"

namespace Header1 {
    int func()
    {
        foo();
        Header2::foo();
    }
} // end of Header1
  • 함수가 포함되어 있는 이름 공간을 호출할 때마다 알려주는 것은 귀찮은 일
#include "Header1.h"
#include "header2.h"

using namespace header1;
int main() 
{
    foo(); // header1 에 있는 함수를 호출
    bar(); // header1 에 있는 함수를 호출
}
  • using namespace를 사용해서 header1 이름 공간에 있는 함수를 호출 할 수 있음

using에 대한 주의 사항

  • using namespace std; 와 같이 어떠한 이름 공간을 사용하겠다고 선언하는 것은 권장되지 않음
    • std에 이름이 겹치는 함수를 만들게 된다면, 오류가 발생하기 때문
  • 또한, C++ 표준 라이브러리는 매우 거대하므로, 정말 수 많은 함수들이 존재
    • 이름이 겹치게 된다면, 수정에 많은 시간이 소요된다.
  • std에는 매번 수 많은 함수들이 새롭게 추가
    • C++ 버전이 바뀔 때 마다 이름 충돌로 인해 동작하지 않을 수 있음
  • 권장되는 방식은 std::를 직접 앞에 붙여 std의 이름 공간의 함수이다 라고 명시해주는 것이 좋음

이름 없은 이름 공간

  • C++에서는 이름 공간에 굳이 이름을 설정하지 않아도 된다.
  • 이 경우 해당 이름 공간에 정의된 것은 해당 파일 안에서만 접근할 수 있음
    • static 키워드를 사용한 것과 같은 효과
 #include <iostream>
 
 namespace {
     int OnlyInThisFile() {}
     
     int onlyInThisFileVariable = 0;
     
     int main()
     {
         OnlyInThisFile();
         onlyInThisFileVariable = 3;
     }
 }

 

 

 

 

출처

https://modoocode.com/136

 

씹어먹는 C++ - <1 - 2. 첫 C++ 프로그램 분석하기>

모두의 코드 씹어먹는 C++ - <1 - 2. 첫 C++ 프로그램 분석하기> 작성일 : 2011-03-06 이 글은 120425 번 읽혔습니다. 이번 강좌에서는첫번째 C++ 프로그램 분석이름공간(namespace) 에 대한 이해 안녕하세요

modoocode.com