공부/C || C++

네임스페이스(namespace)란? std란?

sudo 2021. 7. 19. 01:37

C++을 맨 처음 배울 때 기계처럼 치던 코드중 하나가 using namespace std;였다. 그때 당시 이 코드 한줄이면 cout을 사용할 때 불편하게 std::를 붙이지 않아도 돼서 무조건 썼는데 사실 현업에선 이렇게 쓰지 않는다는 이야기를 듣고 쓰지 않도록 노력하고 있다. 그런데 문득 namespace와 std는 어떤걸 의미하는지 궁금해졌다.

 

우선 namespace는 어떤 변수나 함수의 소속을 알려주는 기능을 한다. 예를 들어서

#include <iostream> 
namespace A
{
	int Num = 100;
}
namespace B
{ 
	int Num = 200;
} 

using namespace A;
using namespace B; 

int main()
{ 
	int Num = 300;
	std::cout << "main Num : " << Num << std::endl; 
	std::cout << "A Num : " << A::Num << std::endl;
	std::cout << "B Num : " << B::Num << std::endl; 
	
	return 0; 
}

똑같은 이름을 가진 Num변수라도 소속(namespace)가 다르니까 다르게 인식을 하고 있는 것을 볼 수 있다.

그렇다면 using namespace std는 해석이 std라는 소속을 가진녀석들을 사용하겠다는 것이다. 이 std는 standard의 약자다. 우리가 쓰는 cout, cin, endl등은 std라는 소속에 속해있던 것이므로 항상 std::cout, std::cin, std::endl; 이렇게 써야 했던 것이다.