C++ 프로그래밍, 네임스페이스 namespace란?

c++namespace

네임스페이스(namespace)

말 그대로 공간의 이름이다.

어떤 공간을 정의하는데 거기에 이름을 정해준다고 생각하자.

 

네임스페이스가 다르다는 것은 서로 다른 공간에서 존재한다는 것이다.

 

이름이 다른 공간이니까 다른 공간안에 동일한 거 같은 게 있어도 무방하게 된다.

공간 A에 a함수와 공간 B에 a함수는 다르다.

 

코드를 통해서 이해 해보자.

namespace

  • 이름 충돌을 피하기 위해
    • 함수
    • 클래스
    • 기타 등등
namespace hello
{
  void PrintHelloWorld();
}

 

'hello'라는 공간에 'PrintHelloWorld()' 함수가 존재한다.

 

namespace가 없었을 때에 동일한 함수명을 사용하면 어떻게 될까?

//Hello1.h
void SayHello();

//Hello2.h
void SayHello();

//Main.cpp
#include “Hello1.h”
#include “Hello2.h”

//…

SayHello(); //컴파일 오류

이렇게 되면

컴파일러는 중복된 함수 SayHello가 정의되어있다고 생각해서 컴파일 오류가 나게 된다.

 

이러한 것을 방지해주기 위해서 namespace를 사용할 수 있다.

네임스페이스 'hello', 'hi'가 있고 각각 다른 공간에 'Sayhello' 함수가 존재한다.

namespace hello
{
  void Sayhello();
}

namespace hi
{
  void Sayhello();
}

//…

hello::Sayhello();
hi::Sayhello();

 

 

네임스페이스가 다르기 때문에 이름이 같아도 컴파일러 오류가 나지 않고 호출할 수 있다.

네임스페이스에 있는 함수를 호출하기 위해서는 'hello::', 'hi::' 방식을 통해서 호출할 수 있다.

 

따라서 C++ 출력문을 사용할 때에 'std::' 또한 namespace이다.

Using 지시문

  • 타이핑의 양을 줄이는 방법일 뿐이다.

namespace / using

using namespace hello;

namespace hello
{
  void SayhelloExample();
}

SayhelloExample(); // hello:: 없이 함수를 호출 할 수 있다.

 

using 사용하지 않으면

std::cout ~~

using을 사용하면

cout << ~~~

 

using namespace를 써주고

같은 이름 함수를 쓰면 또 컴파일러가 화난다.

namespace hello
{
  void Sayhello();
}

namespace hi
{
  void Sayhello();
}

//…

using namespace hello;
using namespace hi;

Sayhello();
Sayhello(); //컴파일 에러가 난다.
그리드형(광고전용)

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

댓글

Designed by JB FACTORY