namespace란 무엇일까?
name : 이름
space : 공간
의미 그대로 해석해보면, 이름공간? 이라는 의미로 해석된다.
C++의 namespace는 Java의 패키지나 C#의 namespace와 비슷하며,
3개 언어에서 모두 함수, 클래스 등등의 이름 충돌을 피하기 위해 사용된다.
오늘 포스팅 하고자 한 것은 C++의 namespace이기에 그에 포커스를 맞춰 진행해보겠다.
C++을 처음 입문해보면,
C++ 표준 라이브러리{Ex. cout(출력문), cin(입력문)}을 사용하려면, std::를 통해 표준 라이브러리 기능을 사용하거나, using namespace std;를 전처리기 밑에 선언해 std:: 없이 C++ 표준 라이브러리의 기능을 모두 사용할 수 있게 된다.
C++을 처음 입문하시는 분들은 using namespace std; 를 전처리기 밑에 써야 더욱 간략한 코딩이 가능하기에 그냥 자연스레 쓸 뿐이지, 왜 구지? C++ 표준 라이브러리의 기능을 네임스페이스 std:: 없이 사용할 수 없게 해둔걸까? 라는 고민은 하지 않았을 것이다.
namespace의 사용 이유는 위에도 말했듯이 이름 충돌 방지를 위함인데, C++의 표준 라이브러리도 사용자가 직접 만든 식별자와 충돌하지 않게 하기 위해 C++은 표준 라이브러리의 모든 기능을 std namespace안에 넣어두게 되었다.
자 이제 C++에서 using namespace std;의 이유와 namespace는 클래스 및 함수 등등의 이름 충돌을 막기 위함이라는 것을 알았을 것이다.
이제 코드와 이야기로 실습해보자.
당신이 게임 회사에 입사하였다.
처음 주어진 당신의 임무는 UI를 띄우는 것이였는데, 사수님이 CreateUI 함수를 사용하면 된다고 알려주셨다.
프로젝트에는 동일한 CreateUI라는 이름을 가진 함수가 3종류가 있었다. 모두 UI를 띄워주는데는 동일했으며,
1. 스킵이 불가능한 대화형 UI 띄우기
2. 스킵이 가능한 대화형 UI 띄우기
3. 영상을 띄울 수 있는 UI 띄우기
이런 역할을 하는것으로 보였다. 같은 네이밍을 가진 CreateUI 함수를 기획자가 부탁한대로 적용해보아야 한다.
자 찾아보니 이미 선임프로그래머가 CreateUI.h안에 3가지 UI 출력을 다 넣어두셨다. 우와 ^~^
자 namespace를 사용하려면 일단 해당 헤더를 추가해줘야겠다.
그리고 CreateUI를 똭 넣으면 될텐데... 어떠한 방법이 있을까?
방법 1.
일단 이러한 방식으로 사용할 수 있을 것이다.
하지만,
3가지 종류 모두 UI를 만드는 함수다 보니 네이밍이 동일해, 에러가 뜬다... 이럴때 어떻게 해야할까?
방법 2.
스코프 분석 연산자(::)를 사용할 namespace뒤에 붙이면, 해당 네임스페이스안에 들어있는 각종 함수나 클래스를
사용할 수 있게된다.
이 방식을 통해 네이밍이 모두 동일하지만, 각기 다른 역할을 하는 함수를 호출할 수 있게 된다.
미흡한 namespace에 대한 포스팅이다... 이정도만 이해하게 되어도, 응용한다면 namespace를
다방면에서 활용 할 수 있게 될것이기에 오늘의 포스팅은 여기까지 ^~^ 봐주셔서 감사합니다.
'Programming > C, C++' 카테고리의 다른 글
C++ push_back, emplace_back in std::vector (0) | 2019.12.04 |
---|---|
03. C++ Manipulator Output Formatting (0) | 2019.11.25 |
01. C/C++ Input, Output 입출력 (0) | 2019.10.28 |