[C++] namespace 란 무엇인가?
Microsoft에서는 namespace 를 다음과 같이 정의한다.
네임스페이스는 내부 식별자(형식, 함수, 변수 등의 이름)에 범위를 제공하는 선언적 영역입니다.
책에서도 위와 같이 정의하는 경우가 많은데 글은 이해가 되나 실제 코드를 읽을 때는 잘 이해가 되지 않는다. C++을 처음 접하게 되면 using namespace std 를 접하게 될 것이다. 하나하나 살펴보도록 하자.
사용 방법
선언
namespace 를 선언하는 방법은 다음과 같다.
namespace std
{
...
}
위의 코드의 의미는 std라는 namespace를 생성하겠다는 의미이다. 우리가 자주 사용하는 using namespace std 위와 같이 선언되어 있을것이다. 그리고 블럭 안에 클래스나 함수, 변수 등이 선언하면 된다. 한가지 주의해야 할 점이 있다면 namespace가 중복되어서는 안된다는 것이다. 또한 namespace 를 중첩해서 사용 할 수 있다.
namespace first
{
namespace second
{
...
}
}
사용
namespace 를 사용하는 것은 우리가 이미 해왔다.
using namespace std;
말 그대로 std라는 이름의 namespace 를 사용하겠다는(using) 의미이다. 만약 using namespace std 를 사용하지 않고 사용하고 싶다면 다음과 같이 사용 할 수 있다.
std::cout << "Hello World!" << endl;
namespace를 사용하는 이유
namespace를 사용하는 이유는 간단하다. 같은 이름의 함수나 변수를 선언한다고 하자. 그렇다면 컴파일러는 분명 중복으로 인한 오류를 내보내게 되어있다. 예를 들어 C++ STL에는 vector라는 클래스가 선언되어 있다. 우리가 수학시간에 배우는 기하와 벡터의 벡터 클래스를 선언하고 싶더라도 클래스명 중복으로 인하여 vector라는 이름으로 선언 할 수 없다. 하지만 namespace를 이용하게 되면 vector라는 클래스 선언이 가능하다.
namespace graphics
{
class vector
{
...
};
}
위와 같은 방법으로 선언하게 되면 문제가 없을 것이다.