안녕하세요^^
using namespace std; 는 네임스페이스 std를 사용하겠다는 말입니다.
예를 보여드릴께요
namespace Window
{
int a;
class CData
{
public: CData() { cout << "Window::CData()"; }
};
}
namespace Mouse
{
int a;
class CData
{
public: CData() { cout << "Mouse::CData()"; }
};
}
위의 코드는 두개의 네임스페이스 Window 와 Mouse 를 선언한 것입니다.
만약에 사용자가 다음과 같이 코딩했다고 봅시다.
a = 10;
CData myData;
위에 코드는 어디에 있는 a 이고 어디에 있는 CData 일까요?
컴파일러는 구분할 수 없습니다. 그럼 어떻게 해야 할까요?
만약에 Window 의 네임스페이스 안에 있는 a 를 사용하고자 한다면
Window::a=10;
Window::CData myData;
라고 해 주어야 합니다. 여기서 :: (스코프연산자) 는 범위를 지정해 주는 연산자 입니다.
즉 Window 라는 네임스페이스 안의 a 라는 변수에 10 을 넣고 Window 라는 네임스페이스
안에 있는 CData 클래스의 객체를 생성하라는 코드가 됩니다. 그럼 myData 가 생성되면서
화면에 Window::CData() 라고 출력이 되겠죠.
그런데 매번 이렇게 Window::a = 10; Window::CData myData; 라고 해준다면 정말 불편할
것입니다. 그래서 우리는 using namespace 라는 컴파일러 명령어를 사용하는 것입니다.
우리가 using namespace Window 라고 한다면
a = 10;
CData myData;
라고 했을 때 컴파일러는 아 저거이 Window 네임스페이스 안에 있는 a 하고 CData 구나 하고
인식합니다.
그럼 다음을 볼까요?
int b;
namespace Window
{
int a;
int b;
}
using namespace Window;
라고 했을 때
b = 10;
이라면 어디의 b 를 말하는 것일까요?
바로 Window 네임스페이스 안에 있는 b 입니다.
하지만 프로그래머는 Window 네임스페이스 밖에 있는 b 에 접근하길 원합니다.
그럴 경우에는 어떻게 할까요?
바로 아래와 같이 합니다.
::b = 10;
앞에 아무런 네임스페이스도 써주지 않으면 전역 네임스페이스의 변수로 알죠.^^
그럼 std 란 무엇일까요?
C++ 에는 표준라이브러리가 있습니다. 그 중에 STL 이라고 하는 아주 훌륭한 넘도 있죠.
STL 은 네임스페이스를 이용해서 만들어 졌습니다. STL 의 네임스페이스가 std 이죠.
우리가 C++ 에서 자주 사용하는 입출력 객체인 cin 과 cout 은 바로 C++ 의 표준 의
입출력라이브러리 입니다. 표준 라이브러리는 다른 라이브러리와의 함수 이름, 클래스 이름
등의 충돌을 막기 위해서 네임스페이스를 쓰기로 했죠. 그것이 바로 std 입니다.
cin 과 cout 도 C++ 표준 라이브러리 이므로 당연히 using namespace std; 라고 해야
제대로 쓸 수 있겠죠. ^^
stl 은 우리가 C++ 로 프로그램을 짤 때 빈번하게 짜야되는 스택, 큐, 리스트, 여러알
고리즘 등을 매번 구현하지 않고도 모든 자료형에 쓸 수 있도록 만든 Standard Template Library
입니다. C++ 의 템플릿 기능을 이용해서 만들어졌죠.
STL 은 C++ 프로그래머에게 날개를 달아주는 놈이라고 할까요? ^^
꼭 공부하시길 바랍니다.
네임스페이스를 사용해서 클래스처럼 쓰는 예를 보여드릴까요? ^^
namespace Window
{
void Move(int x, int y);
void Name(char *szString);
char* Name(void);
private:
char m_myName[CHAR_MAX];
}
void Window::Move(int x, int y)
{
//my code;
}
void Window::Name(char *szString)
{
strcpy(Window::m_myName, szString);
}
char * Window::Name(void)
{
return Window::m_myName;
}
using namespace Window;
void main()
{
Name("my name is Douner ;)");
cout << Name() << endl;
}
^^ 조금 횡설 수설 했군요^^
많은 도움이 되길 바랍니다
김진수 님이 쓰신 글 :
: 책의 모든 예제에 using namespace std; 를 사용 하구 있는데 무슨 의미로 사용 되구
:
: 있는 것인지 궁급합니다..
:
: 그리고 다음은 헬프 파일에 있는 예제 입니다.
:
: #include <iostream>
: void main ( )
: {
: using namespace std;
: char p[50];
: // remove all the white spaces
: cin >> ws;
: // read characters from stdin until a newline
:
: // or 49 characters have been read
: cin.getline(p,50);
: // output the result to stdout
: cout << p;
: }
:
: 여기서 cin >> ws; 화이트 영역을 모두 지운다라고 되있는데 이것도 무슨 의미인지 궁금합니다.
|