Namespaces In C++

사진 출처: www.SoftwareTestingHelp.com



네임스페이스(namespace)란 무엇인가?


네임스페이스가 뭔지 알기 전에 아주 간단한 Hello World 예제를 살펴봅시다.

C++에서 Hello World 를 찍어내려면

 

#include <iostream>
using namespace std;

int main(void)
{
	cout << "Hello World! C++" << endl;
	return 0;
} 

 

와 같이 입력하면 됩니다.

C를 미리 공부하셨다면, C에서의 HelloWorld 예제랑 차이점을 몇가지 찾아낼 수 있을 것이고 이런 질문을 하겠죠..

 

※ 일단, 헤더파일부터 다르네요. => 그거야 사용하는 함수가 다르니까 헤더파일이 다른 것이겠죠? 

C 언어에서는 printf 함수를 사용했다면, C++ 에서는 cout이라는 함수를 사용합니다. 

cout 함수를 사용하기 위해 "iostream"(input/output stream 이라는 뜻입니다.) 헤더파일을 인용한 것입니다.

 

※ 엥? 그렇다면 using namespace std; 는 뭐죠? 처음 보는 건데?

=> 이 질문을 받기 위해서 제가 Hello World 예제를 먼저 해보자고 한 겁니다.

using namespace std; 이거 그냥 그대로 읽어봅시다. "std라는 네임스페이스를 사용하며..."라고 해석됩니까?

그렇습니다. 이 문장은 우리가 std라는 네임스페이스를 사용할 수 있게 해줍니다.

여기서 std는 많이 본 약자죠? 그렇습니다. standard의 약자입니다. 

즉, 

using namespace std; // 이 문장은 표준 네임스페이스를 사용하겠다는 의미입니다.

 

 

자 이제, 네임스페이스가 뭔지 알아보죠. 

using namespace 선언은 말 그대로 소속을 알리는 역할을 합니다. 그러니까 네임스페이스는 변수 이름이나 함수 이름과 같이 명칭을 사용하는 공간으로 소속을 나타낸다고 표현할 수 있습니다. 예를 들어, 영희네 강아지도 멍멍이이고, 철수네 강아지도 멍멍이에요. 둘이 어떻게 구분하죠? 둘 다 멍멍이면 구별 안되죠? 우리는 구별하기 위해서 영희네 멍멍이, 철수네 멍멍이라고 언급할 수 있습니다. 여기서 영희, 철수라고 하는 '소속'을 네임스페이스라고 생각하면 됩니다.

 

 네임스페이스는? 소속! 

 

namespace는 다음과 같은 형태로 사용되어집니다.

 

namespace 이름
{ 
	선언내용;
}


자, 이제 바로 네임스페이스 예제를 들여다 봅시다.

 

#include <iostream>
namespace A_RANGE
{
	int score = 100;
	int FUNC(int s)
	{
		return s/5;
	}
}
  
namespace B_RANGE
{
	int score = 200;
	int FUNC(int s)
	{
		return s/10;
	}
}
  
using namespace std;
using namespace A_RANGE;
using namespace B_RANGE;
  
int main()
{
	int score = 300;
  
	cout << "main score : " << score << endl;
	cout << "standard score : " << std::score << endl;
	cout << "A_RANGE score : " << A_RANGE::score << endl;
	cout << "B_RANGE score : " << B_RANGE::score << endl;
  
	return 0;
}

 

예제의 결과값은 300 300 100 200 입니다.

예제를 자세히 보시면 또 알 수 있다시피 네임스페이스의 변수 및 함수의 사용은


[namespace]::[변수 혹은 함수]


의 꼴로 사용됩니다.

FUNC를 메인 함수에서 사용하지 않았는데, 이 부분은 여러분이 유연하게 예제를 고쳐가면서 직접 사용해보세요.

함수를 사용하는 것은 변수 사용하는 것과 동일합니다.

 

이 예제를 통해서 얻어가야 할 것은 네임스페이스라는 소속 공간에 따라서 변수나 함수가 같은 이름임에도

다른 식으로 구분이 될 수 있다는 것을 아셔야 합니다. 

 

그리고 네임스페이스 안에도 함수가 들어가죠. 마치, 하나의 객체 같지 않나요? 

C++ 도 객체지향언어(OOP)입니다. 즉, 네임스페이스가 C++에서의 하나의 객체 단위가 된다고 생각할 수도 있곘습니다! :)

 

 

 

여기까지, 네임스페이스에 대한 간단한 정의 및 설명이었습니다. 

감사합니다.

 

'컴퓨터 프로그래밍' 카테고리의 다른 글

FreeNX 서버 구축하기  (0) 2013.09.14
ACPI 란 무엇인가?  (1) 2013.09.14
SAMBA 구축하기  (0) 2013.09.07
user ID 생성 및 sudo 권한 부여  (0) 2013.09.07
세마포어(semaphore) 란 무엇인가?  (0) 2013.09.07

+ Recent posts