네임스페이스(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(); //컴파일 에러가 난다.
그리드형(광고전용)