namespace는 큰 프로젝트에서 이름 충돌을 방지해주는 기능을 제공한다. 코드 안의 구성 요소들은 각각 다른 자신만의 이름을 가지고 있어야 한다.
int main(void){
int x =0;
int x =1;
}
만약 이와 같이 코드를 작성하면 컴파일 에러가 발생할 것이다. 그러나 namespace를 사용하면 같은 이름을 가진 변수가 서로 다른 값을 가지고 있을 수 있도록 해준다.
namespace first{
int x = 1;
}
namespace second{
int x = 2;
}
int main (){
int x = 0;
cout<< x;
}
위의 경우 main에서 x를 출력했기 때문에 0이 출력된다.
namespace first{
int x = 1;
}
namespace second{
int x = 2;
}
int main (){
int x = 0;
cout<< first::x;
}
그러나 x 앞에 first::를 붙여주면 namespace first에 있던 x가 출력되어 1이 나온다 '::'는 first namespace의 x를 참고하겠다는 의미이다.
보통 코테를 풀 때 시작 전에
using namespace std;
를 작성하고 시작하는데, 그 이유는 미리 std를 참조한다고 컴퓨터에게 알려주어서 string, cout 등 앞에 std를 참조한다는 것을 적어주지 않아도 되기 때문이다.
따라서 namespace를 이용하는 이유는 똑같은 이름의 entity가 있어도 서로 다름을 확인하고 구분해주기 위해서이다.