이름공간(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 |