본문 바로가기
프로그래밍 기초/C++

네임스페이스(namespace)란?

by junsday 2016. 11. 11.

C++를 공부해본 사람이라면 namespace가 무엇인지 들어보았을 것이다. C++에서는 printf 대신에 iostream에서 제공하는 cout을 쓴다고 배웠다. 그런데 cout을 쓰기 위해서는 전처리기 밑에 using namespace std; 를 적어놓아야 사용할 수 있다. 아니면 std::cout으로 사용을 해야 한다. 이미 알고 있겠지만 namespace에 대해 공부해보자.

우리가 회사에 가게 되면 개인프로젝트는 절대 없다. 전부 팀으로 진행되는 프로젝트이고 여러 사람이 코드를 짜서 나중에 합치거나 좋지 않은 코드를 버리거나 한다. 근데 두 개의 팀에서 작업을 한 뒤 나중에 코드를 합쳤을 때를 생각해보자. 두 개의 팀에서 작성한 코드 중 클래스 이름이나 함수의 이름이 같은 것이 있을 수 있다. 실제로는 생각보다 많이 겹친다고 한다. 간단한 Add함수를 예로 들자. 무언가를 더하는 함수라면 누구나 함수 이름을 간편하고 알아보기 쉽게 Add라고 만들 것이다. 그럼 A팀과 B팀의 코드에 Add라는 함수가 동시에 있기 때문에 Add함수 호출 시 문제가 발생하게 된다. 그래서 실무에서 팀 작업 시 사용하는 것이 namespace이다.

다음 그림을 보자.



사용법은 간단하다. namespace로 감싸주고 사용할 때에는 A::Add();와 같이 사용을 하거나 우리가 늘 사용했던 것처럼 using namespace A를 써주면 된다. 메인 함수를 보면 using을 이용해서 A 네임스페이스를 사용한다고 했다. 따라서 메인 함수의 Add();A헤더의 Add함수를 읽을 것이다. using을 쓰지 않아도 된다. 위에서 보는 것과 같이 B::Add();로 사용을 해도 무방하다.

생각보다 간단하다. 네임스페이스를 이용해서 같은 클래스 이름도 구분할 수 있다. 같은 이름의 클래스 내의 같은 이름의 멤버함수 또한 구분이 가능하다. 사용법은 위와 같다. 간단한 코드라도 직접 만들어 보도록 하자.

지금까지 네임스페이스에 대해 알아보았다. 사용법이 간단하고 이해하기도 쉽다. 혹시라도 간단한 소스를 짤 때 같은 이름을 쓰고 싶거든 네임스페이스를 한 번 써보도록 하자.

'프로그래밍 기초 > C++' 카테고리의 다른 글

가상함수 - 동적 바인딩과 정적 바인딩  (1) 2017.05.31
getchar()  (0) 2016.11.11
생성자(Constructor)란?  (0) 2016.11.11
인자(Argument)와 매개변수(Parameter)  (0) 2016.11.11
객체란?  (0) 2016.11.11

댓글