Namespace에 대해 이해해보도록 하장
우선 우리가 지금까지 썻던 using namespace std;
를 떠올려보자 무슨 역할을 했었는가?
#include <iostream>
using namespace std;
int main()
{
std::cout << "Hello" << endl;
cout << "Hello" << endl;
return 0;
}
이 간단한 코드는 동일한 출력을 낸다. 이는 using namespace std;
를 통해 std::
사용없이 편하게 Code를 짤 수 있게 해준다.
사용자가 namespace를 정의하여 사용하기도 하는데 다음 코드를 봐보자.
#include <iostream>
namespace MySpace1
{
int doSomething(int a, int b)
{
return a + b;
}
}
int doSomething(int a, int b)
{
return a * b;
}
using namespace std;
int main()
{
cout << MySpace1::doSomething(3, 4) << endl;
cout << doSomething(3, 4) << endl;
return 0;
}
output = 7 , 12를 출력한다.
namespace의 name을 MySpace1으로 지음으로써 using namespace MySpace1;
와 같이 사용할 수 있다. 혹은 MySpace1::doSomething()
을 사용하여 쓸 수도 있다.
만약 이런 경우라면 어떻게 될까?
왜 씨뻘건 줄이 그어져 있을까? 그건 compiler가 어떤 doSomething()을 실행해야 하는지 모른다는 것이다. main()
에 있는 doSomething()
은 MySpace1에 있는 doSomething()
도 사용할 수 있고, 함수인 doSomething()
도 사용할 수 있으므로 error가 나는 것이다. 앞에서 배웠던 똑같은 함수 이름이 있을 경우 에러가 나는 것과 비슷한 상황이다.
따라서 User는 이러한 상황에 빠지지 않도록 조심하여 코드를 짜도록 하여야 한다.