네임스페이스란?
네임스페이스는 변수, 함수, 클래스 등을 그룹화하는 문법이다. namespace 예약어를 이용해 다음과 같은 형태로 사용한다.
namespace 이름
{
...
}
이름은 그룹의 이름 정도가 되겠다.
#include <iostream>
using namespace std;
namespace MYSPACE
{
int num = 10;
void myFunc(void)
{
cout << "myFunc()" << endl;
}
}
int main()
{
cout << MYSPACE::num << endl;
MYSPACE::myFunc();
return 0;
}
결과값:
10
myFunc()
네임스페이스는 규모가 큰 프로그램을 만들 때 사용하면 좋다. 개발자들이 사용하는 변수나 함수가 겹치는 문제를 해결해주기 때문이다.
프로그램을 개발하면서 자주 사용해야 하는 네임스페이스가 있다면 using 예약어를 사용하여 네임스페이스를 생략하는 것도 좋은 방법이다. 예를 들어 std의 cout과 cin을 매번 std::cout으로 사용하지 않고 cout만으로 사용하는 식이다.
위의 예제에서 std사용을 위한 #include <iostream> 바로 밑에 using 예약어를 사용하였듯이 using 예약어를 사용할 때는 using 위치를 조심해야 한다. 네임스페이스를 하나만 사용할 것이라면 어디든 사용할 수 있지만, 되도록 네임스페이스 바로 밑에 using 사용하는 것이 바람직하다.
#include <iostream>
using namespace std;
namespace MYSPACE
{
int num = 10;
void myFunc(void)
{
cout << "myFunc()" << endl;
}
}
//MYSPACE 네임스페이스에대한 using 선언
using namespace MYSPACE;
int main()
{
cout << num << endl; //MYSPACE::num 할 필요없다.
myFunc(); //MYSPACE::myFunc()과 같다.
return 0;
}
결과값:
10
myFunc()
네임스페이스는 다중 정의가 가능하고 네임스페이스 안 동일한 이름을 가진 함수를 허용한다. 따라서 모호성의 문제를 가지고 있다. 이럴 경우 네임스페이스를 꼭 기술하여 구별해야 한다.
#include <iostream>
using namespace std;
void TestFunc(void)
{
cout << "TestFunc()" << endl;
}
namespace MYSPACE
{
void TestFunc(void) {
cout << "MYSPACE TestFunc()" << endl;
}
}
//using namespace MYSPACE; 모호성 에러
int main()
{
TestFunc();
MYSPACE::TestFunc();
return 0;
}
결과값:
TestFunc()
MYSPACE TestFunc()
그냥 TestFunc()를 호출하자 전역 함수가 호출되었다. 이처럼 함수, 클래스 메서드 별로 식별자 검색 순서가 존재한다. 굳이 외우지 않더라도 자연스럽게 암기할 수 있을 것이다. 하지만, using 선언된 네임스페이스 혹은 전역 함수 두 곳에 동일한 식별자가 존재할 경우 컴파일 오류가 발생한다는 것은 기억하자.
'C++' 카테고리의 다른 글
[C++] 참조자(Reference) (0) | 2019.12.16 |
---|---|
[C++] this 포인터 (0) | 2019.12.15 |
[C++] 클래스와 메소드 (0) | 2019.12.15 |
[C++] 오버로딩(Overloading)과 템플릿(Template) (0) | 2019.12.13 |
[C++] 디폴트 매개변수 (0) | 2019.12.13 |