본문 바로가기

C++

C++ 기초(namespace)

728x90

 

네임스페이스는 코드에서 이름이 서로 충돌하는 문제를 해결하기 위해 사용된다. 예를 들어 본인 소스 파일에서 사용한 함수가 인클루드한 외부 라이브러리에도 존재한다면 컴파일러는 어떤 함수를 호출할지 알 수 없게 된다.

//namespace.h
namespace mycode{
    void foo();
}
 

위와 같은 구조가 네임스페이스의 기본 구조이다.

#include <iostream>
#include <namespace.h>

void mycode::foo()
{
   std::cout << "mycode 내의 foo()함수를 호출합니다." << std::endl; 
}
/* 혹은
namespace mycode {
   void foo()
   {
        std::cout << "mycode 내의 foo()함수를 호출합니다." << std::endl; 
   }
}
*/
 

와 같이 함수 구현부에서도 사용가능하다. 이렇게 네임스페이스를 지정해두면 위의 foo()함수를 호출할라면

mycode::foo();
 

 

와 같은 형식으로 ::스코프 지정 연산자를 이용해 네임스페이스를 명시해줘야 한다. I/O 스트림에서 사용한

std::cout 과 std::endl 역시 앞에 std라는 네임스페이스가 붙은 것이다.

 

매번 앞에 네임스페이스를 붙여 주기 번거롭기 때문에 using 지시자를 사용하여 접두어를 생략할 수 있다

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, World!" << endl;
    return 0;
}
 

특정한 항목만 가르키도록 using 문을 작성할 수도 있다. 이렇게 사용할 시 같은 네임스페이스의 다른 항목들은 네임스페이스 접두어를 붙여야 한다.

using std::cout;
cout << "Hello, World!" << std::endl
 

네임스페이스를 중첩하여 사용할 시

namespace A{
    namespace B{
        namespace C{
            /*Code*/
        }
    }
}
// 혹은
namespace D::E::F{
    /*Code*/
}
 

와 같은 형식으로 사용가능하다.

 

 

728x90

'C++' 카테고리의 다른 글

C++ 기초(조건문)  (2) 2023.01.19
C++ 기초(enum, struct)  (0) 2023.01.19
C++ 기초(변수와 연산자)  (0) 2023.01.19
C++ 기초(리터럴)  (0) 2023.01.19
C++ 기초  (0) 2023.01.19