사진 출처: 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 |