본문 바로가기
프로그래밍/C++

namespace(이름 공간)

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 15.



이름공간(namespace)라 하여, 쉽게 생각하면 방을 만든다? 라고 봐도 괜찮을 것 같다.

동일한 이름의 변수나 함수에 대해서 각각의 방을 만들어 준다고 생각하는게 참 좋은 표현같다.

A방에 int a님
B방에 int a님
C방에 int a님...;; (억약이 좀 그러네 ㅋ)

간단하게 예제만 집어 보고 넘어가자.

 

#include <iostream>

// std란 namespace에 대해서 앞으로 쭉~ 사용한다.
using namespace std;

namespace		// namespace에 이름을 지정하지 않은 상태
{
	int g_Val; 
}	

namespace VALUE		// namespace안에 또 namespace를 넣어도 괜찮다.
{
	int a;
	float f;
	char c;
	namespace INT
	{
		int a;
	}
	namespace FLOAT
	{
		float f;
	}
}

// temp란 공간은 value에서 만든 공간과 이름을 함께 쓴다.
namespace Temp = VALUE;

// 이런 식으로 함수의 이름을 돋보이게 하기 위해서도 쓰인다.
namespace FUNTION
{
	namespace Emotion
	{
		// 선언과 정의가 모두 들어가 있는 예
		void Smile()
		{

		}
		// 선언만 들어가 있는 예
		void Angry();
		void Cry();
	}
}

void main()
{
	// using을 해주었기에 cout, endl을 편하게 쓸 수 있다.
	cout << endl;

	// 이름을 정의해 주지 않은 namespace를 호출할땐 이렇게,
	::g_Val = 200;

	// namespace에 대해서 호출하고 싶을 때,
	VALUE::a = 100;
	VALUE::f = 10.0f;
	VALUE::c = 'T';

	// Temp와 VALUE는 서로 같은 곳을 말한다.
	VALUE::INT::a = 0;
	Temp::FLOAT::f = 0;

	// 함수 호출
	FUNTION::Emotion::Smile();	// 정의, 선언 모두 되있든
	FUNTION::Emotion::Angry();	// 그렇지 않든,
	FUNTION::Emotion::Cry();	// 사용은 똑같다.
}

// namespace 밖에서 함수의 정의를 해주는 것도 물론 가능하다.
void FUNTION::Emotion::Angry()
{
}
void FUNTION::Emotion::Cry()
{
}



이름 공간에 존재하는 함수나, 변수 또는 그 안에 있는 또다른 이름공간을 호출 할때에는
범위 지정 연산자 라고 하는 :: (콜론 x2)를 사용하여 가져 올 수 있다.

'프로그래밍 > C++' 카테고리의 다른 글

new & delete  (0) 2010.03.17
const 상수화  (0) 2010.03.17
inline 함수  (0) 2010.03.15
디폴트 매개변수  (0) 2010.03.15
함수 오버로딩 (overloading)  (0) 2010.03.15