• 1.9.1 네임스페이스(namespace)
  • 1.9.2 using namespace

1.9.1 네임스페이스(namespace)

 

우리말로는 명칭 공간이라고도 하는 개념이 C++에 있다. 프로그램을 만들다 보면 다른 동작을 하면서 같은 이름의 함수를 많이 쓰게 되는데, 이때 컴파일러가 어떤 함수인지 명확히 선택할 수 있도록 구분해줘야 한다. 이를 위해 사용하는 것이 바로 네임스페이스이다.

 

#include <iostream>

namespace MySpace1
{
	// 네임스페이스 안에 네임스페이스 가능
	namespace InnerSpace
	{
		int myFunction()
		{
			return 0;
		}
	}
	int doSomething(int a, int b)
	{
		return a + b;
	}
}

namespace MySpace2
{

	int doSomething(int a, int b)
	{
		return a * b;
	}
}


using namespace std;

int main()
{
	
	// 3*4가 실행된다.
	cout << MySpace2::doSomething(3, 4) << endl;

	//앞으로 MySpace1이라는 namespace를 사용할 것이다.
	using namespace MySpace1;

	// 3+4가 실행된다.
	cout << doSomething(3, 4) << endl;
	InnerSpace::myFunction();

	return 0;
}

 

코드를 보면 같은 이름의 함수가 존재하지만 빌드가 잘되는 것을 볼 수가 있다. 바로 네임스페이스 개념을 사용하였기 때문이다. 네임스페이스 안에 함수를 정의하면 해당 함수를 사용할 때는 네임스페이스를 앞에 작성해야 하고 이를 통해 컴파일러가 어떤 함수인지 혼동하지 않고 바로 찾을 수가 있다.

 

이러한 방식이 왜 필요한지 독학을 하는 경우엔 이해가 되지 않을 수 있는데, 실무에 가면 협업하는 사람들이나 선배님들이 작성한 코드에서 함수의 이름을 잘 나타내기 위해 최대한 보편적인 언어로 작성을 한다. 그러한 방식을 사용하다 보니 서로가 같은 이름의 함수를 작성하는 경우가 생기기도 한다. 실제로 현 직장에서 다루는 프로그램의 코드를 보면 configure 함수가 여러 개 존재하는 것을 볼 수가 있다.


1.9.2 using namespace

 

아마 많은 C++ 개발자들이 기초 교육을 받을 때 많이 써본적이 있을 것이다. using namespace std;라는 명령문은 정말 친숙하게 사용했을 것이라 생각한다. using namespace를 통해 해당 영역을 벗어나지 않는다면 계속 언급한 네임스페이스를 사용할테니 네임스페이스를 제외하고 함수를 호출해도 알아서 찾아달라는 의미이다.

 

앞의 예시에서는 std를 그런식으로 쓰고 MySpace1도 사용하였다. 이처럼 네임스페이스를 구현하고 사용하는 방법이 다채로운데, 처음 접한다면 시간을 투자해서 이것저것 실험을 해보는 것이 좋겠다.

+ Recent posts