이름 공간
-
이름 공간이 존재 등장한 이유?
변수, 함수 등의 이름 충돌을 막기 위함이다.
-
이름 공간
위와 같은 예제에서는 두 함수 모두 수행하는 내용은 다르지만 이름, 매개 변수가 같다는 이유로 오버로딩이 적용되지 않고 에러가 난다. 예제에서는 나타나지 않지만 두 함수 모두 다른 모듈이나 소스에 이미 의존되어 있는 부분이 있기 때문에 이름을 바꾸거나 할 수 없다. 이러한 경우 이름 공간을 이용한다.
위의 예제에서는 각 함수를 A, B라는 이름 공간(namespace) 으로 감싸고, 영역을 구분하였다. 영역을 구분하였기 때문에 함수 중복 문제로 오류가 발생하지 않는다. 그리고 24, 25번 라인에서는 ‘ :: ’ 범위 지정 연산자를 이용하여 이름 공간을 지정하여 그 내부의 함수를 지정하여 호출하는 식으로 함수 호출을 진행함.
-
이름 공간 기반의 함수 선언과 정의 구분
이름 공간에서 동일한 이름 공간 내의 함수 호출 및 변수 참조가 일어날 경우 범위 지정 연산자를 이용하여 이름 공간을 명시할 필요가 없다.
-
이름 공간의 중첩
이름 공간은 중첩이 가능하고, 범위 지정 연산자를 거듭 이용하여 범위를 지정하고 변수나 함수에 접근한다.
-
이름 공간 std
std::cout, std::cin, std::endl 등은 모두 이름 공간 내의 어떤 요소들이었다.
위와 같은 형태로 존재하고 있는 요소들이고, cout/cin/endl 은 추후에 정리.
-
using 연산자를 이용한 이름 공간의 명시
위와 같이 이름 공간 전체를 명시하여 이름 공간의 범위 지정 연산을 생략할 수 있다.
위와 같이 이름 공간 내의 특정 요소를 지정하여 이름 공간 범위 지정을 생략할 수 있다.
아래는 이름 공간을 명시 혹은 이름 공간 내의 특정 요소에 이름 공간을 명시하여 범위 지정 연산을 생략한 예를 보여준다.
'컴퓨터 언어 정리 > C++ 언어' 카테고리의 다른 글
08 Malloc과 free의 대체 – new와 delete (0) | 2020.09.10 |
---|---|
07 참조자(Reference) (0) | 2020.09.08 |
05 인라인 함수(inline function) (0) | 2020.09.07 |
04 디폴트 매개변수(Default Parameter) (0) | 2020.09.07 |
03 함수 오버로딩(Function Overloading) (0) | 2020.09.06 |