안녕하세요? 공대남입니다. 오늘은 이름공간에 대하여 알아보도록 하겠습니다.

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++강의에서는 좀 더 유익하고 좋은 글로 찾아뵙겠습니다. 감사합니다!

+ Recent posts