C++/C++ 기본

namespace와 std::

검정비니 2018. 7. 1. 17:39
728x90
반응형

namespace와 std::


이름 공간에 대한 이해를 돕기 위해 한 가지 예를 들어 보자. 현재 우리 아파트 단지에는 '김철수'라는 이름을 가진 사람이 여럿 살고 있다. 그러므로 우리 아파트 단지에서 '김철수'를 찾고자 하면, 몇 동에 사는 '김철수'인지 구분해야 한다. 1동에 사는 김철수를 "1동::김철수"라고 나타낸다고 했을 때, 1동이 바로 C++에서의 이름 공간이다.



1. namespace


일상 생활뿐 아니라 C++ 프로그래밍 과정에서 이름(identifier)이 충돌하는 경우가 있다. 다음은 이름 충돌이 발생하는 대표적인 경우이다.


-프로젝트를 여러 명이 나누어 개발하는 경우

- 다른 사람이 작성한 소스 코드나 목적 파일을 가져와서 사용하는 경우


프로젝트를 여러 명이 나누어 개발하는 경우, 한 개발자가 작성한 클래스, 상수, 변수, 함수의 이름이 같은 팀의 다른 개발자가 작성한 이름과 동일할 경우, 컴파일이나 링크 시에 오류가 발생하게 된다. 이를 수정하는데 상당한 시간과 노력이 든다. 혹은 오픈 소스를 가져와서 개발자가 작성한 프로그램과 함께 컴파일 하는 경우에도 이름 충돌의 문제가 발생한다.


이러한 문제를 해결하기 위해서 만든 것이 바로 이름 공간이다. 이 이름 공간을 통해서 각 상수, 변수, 함수 등이 어느 이름 공간에 소속 되는지를 표시하고, 동일한 이름으로 인해서 생기는 오류를 해결하게 해준다.



2. std:: 란?


std는 2003년 ANSI C++ 표준에서 정한 표준 이름 공간으로서, 모든 C++ 표준 라이브러리는 std 이름 공간에 만들어져 있다. 그러므로 응용 프로그램이 C++ 표준 라이브러리에서 선언된 이름을 사용할 때, std::를 접두어로 붙여야 한다.



3. std::의 생략과 using 지시어


std 이름 공간에 선언된 수많은 이름에 대해 사용할 때마다 std:: 접두어를 붙이는 것은 상당히 번거롭다. using 지시어를 이용하면 이름 공간 접두어를 생략할 수 있다.


i.e.

using namespace std; //std 이름 공간에 선언된 모든 이름에 std:: 생략 가능

using std::cout; //cout에 대해서만 std:: 생략

반응형

'C++ > C++ 기본' 카테고리의 다른 글

C++에서의 문자열  (0) 2018.07.01
키 입력 받기  (0) 2018.07.01
화면 출력  (0) 2018.07.01
#include <iostream>  (0) 2018.06.29
main 함수  (0) 2018.06.29