>> 질문 : 김진수 ( miman101) 님 (C/C++ Q&A 게시판
218번 using namespace std 는 언제 사용하는 것인가요?
)
책의 모든 예제에 using namespace std; 를 사용 하구 있는데 무슨 의미로 사용 되구
있는 것인지
궁급합니다..
그리고 다음은 헬프 파일에 있는 예제 입니다.
#include
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; 화이트 영역을 모두 지운다라고 되있는데 이것도 무슨 의미인지 궁금합니다.
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; }
|