안녕하세요? 공대남입니다. 오늘은 이름공간에 대하여 알아보도록 하겠습니다.
namespace 같은 경우는 함수의 이름이 겹칠 때 사용하게 됩니다.
이전에 배웠던 함수 오버로딩은 매개변수의 형식이나 수가 다를 때 자동으로 구분되지만
매개변수 형식이나 수도 같다면 함수를 구분할 수 없습니다.
여기서 함수 이름과 매개변수 형식도 같을 때 구분할 수 도 있도록 해주는것이
'이름공간(namespace)' 입니다.
차례
1. namespace
2. using 을 통한 명시
1. namespace
쉽게 설명하기 위해 예를들어 보겠습니다.
A,B라는 회사에서 프로그래밍 대형화를 위해 서로가 시스템을 개발하는데 참가했습니다.
그리고 서로의 코드를 비교해보니 상당 부분 함수가 겹치는 것입니다.
이럴 때는 두 회사 중 하나가 바꾸어야 하지만, 서로가 좀 처럼 양보하기 싫은겁니다.
그럴 때 이름공간이 유용합니다. 이름공간의 함수 호출법은 다음과 같습니다
만약 Func1 이라는 함수가 겹친다면 namespace 를 이용하여 호출하면
A회사의 Func1을 호출해라 ! 이처럼 됩니다.
다음 코드의 예시를 보겠습니다.
namespace를 이용해 각각 Acom, Bcom를 명시하고 함수를 그 안에 적습니다.
(함수를 먼저 선언하고 정의해도 됩니다.)
그리고 main 함수에서 Acom::Func1(); , Bcom::Func1(); 로 각각 호출을 합니다.
여기서 :: 은 범위지정 연산자 입니다. 즉, 이름공간을 지정할 때 사용합니다.
그러면 다음과 같이 출력됩니다.
함수의 이름과 매개변수의 형식이 같더라도 namespace를 사용하여
얼마든지 구별하여 사용할 수 있습니다.
그러면 여기서 앞서 입출력 코드로써 std::cout , std::cin , std::endl을 사용했는데,
이것도 namespace의 사용과 유사하다고 느끼셨을 것 입니다.
그렇습니다. cout, cin, endl은 std안에 선언되어있고 그것을 사용하던 것이 였습니다.
-
2. using을 이용한 명시
cout, cin, endl이 std에 선언된 함수라는 것은 알았는데
이를 사용할 때 마다 std:: 을 붙여주기에는 귀찮으실 수도 있습니다.
이를 위해 using을 사용하면 생략하고 사용 가능합니다.
다음과 값이 using을 통해 선언하면
cout, cin, endl을 std의 이름공간에서 찾으라고 하는 것과 같습니다.
그렇게하면 std를 생략하고 코드를 사용할 수 있습니다.
만약 일일히 std::cout, std::cin, std::endl을 선언하시는게 귀찮으시다면
using namespace std; 을 선언함으로써
이름공간 std 에 있는 모든 것에 대해 이름공간 지정을 생략할 수 있습니다.
하지만 프로그램이 복잡해지고 커진다면 오류가 생길 확률도 커집니다.
-
이상 오늘은 namespace에 대하여 알아보았습니다. 도움이 되셨는지요?
다음 c++강의에서는 좀 더 유익하고 좋은 글로 찾아뵙겠습니다. 감사합니다!
'PROGRAMING > C++' 카테고리의 다른 글
C++ 정보은닉 쉽게 알아보기 ! (0) | 2018.04.08 |
---|---|
C++ CLASS(클래스) 정의와 struct(구조체)와 차이 (1) | 2018.04.04 |
C++ Reference(참조자) 개념과 포인터와 차이 (0) | 2018.03.31 |
C++ : 오버로딩, 매개변수 디폴트 값 알아보기 ! (0) | 2018.03.28 |
C++ 입출력 코드 : std, cout, cin, iostream (0) | 2018.03.28 |