본문 바로가기
[ C++ ]/- C++ 실습연습

C++ [namespace, 네임스페이스]

by MRG 2021. 7. 16.
728x90
반응형
728x90

▣ 안녕하세요

이번장에서는 네임스페이스를 공부해보겠습니다. 

네임스페이스는 쉽게 정의하면 동일한 이름으로 변수나 함수, 배열 등을 사용할 때

소속을 지정해 그걸 구분하기 위한 키워드라고 생각하시면 됩니다. 

그럼 간단한 코드를 통해서 하나하나 공부해보겠습니다. 

 

▣ 공부하기 전에 꼭 전역 변수, 지역변수를 공부하고 시작해주세요.

 

▣ num이라는 변수를 두가지 형식으로 정의했습니다.

하나는 전역변수 하나는 지역변수입니다. 

main에서 같은 이름에 num을 출력해보면 지역변수를 출력하는 걸 확인할 수 있습니다. 

다시 말해 함수 안에 있는 지역변수가 우선순위로 접근한다라는 걸 확인할 수 있습니다.

그럼 전역변수를 접근하려면 어떻게 해야 할까요

 

▣ :: 연산자를 사용하여 ::num을 하게 되면 전역 변수를 접근하게 됩니다. 

 

▣ 이번에는 함수를 만들어보겠습니다. 

같은 이름에 함수에 같은 매개변수를 사용하여 각각 다른 연산을 하게 해 보겠습니다.

이렇게 하면 함수 오버 로딩도 되지 않습니다.

하지만 이렇게 함수와 매개변수가 동일하게 사용되는 경우가 있습니다.

이럴 때 바로 네임스페이스를 사용합니다. 

같은 이름과 매개변수를 가지고 있습니다. 각자에 소속을 다르게 만드는 것입니다. 

 

▣ namespace라는 키워드 옆에 Plus 각각에 소속 이름을 넣고 

{} 괄호로 묶어주게 되면 소속에 속하게 됩니다. 

그리고 std::처럼 Plus:: 소속에 접근해서 calculator() 함수를 각각 사용하게 되면

그 소속에 속한 함수를 호출하게 됩니다. 

 

▣ 그리고 네임스페이스에 각각에 변수를 정의하고 Plus::x 동일하게 네임스페이스에 속한 변수를 따로 접근하여 

사용할 수 도 있습니다.

이렇게 되면 같은 이름에 변수도 네임스페이스에 접근해서 사용할 수 있겠죠?

그런데 여기서 주의해야 할 건 이름을 정할 때 그 이름에 의도를 파악할 수 있게 이름을 정해줘야 합니다.

아무리 네임스페이스로 소속을 만든다고 하여도 그 변수에 의미와 의도가 나타나지 않게

a라고만 정의를 한다면 나중에 코드를 볼 때 유지 보수하기가 어렵습니다.

이점 참고해주세요.

 

▣ 이런 식으로 네임스페이스를 충첩으로도 사용할 수 있습니다. 

Plus::Mutiply::calculator() 이런 식으로 중첩해서 접근을 해도 되지만,

using namspace Plus; 를 사용하여 정의하고 사용해도 됩니다. 

 

▣ 이렇게 충첩네임스페이스로 const 상수를 선언해서 사용할 수 도 있습니다. 

 

▣ 위에서처럼 하게 되면 Num1::Num2::x 이런 식으로 여러 가지 중첩으로 접근을 해야 하기 때문에 

namespace Num = Num1::Num2로 Num네임스페이스 안에 Num1::Num2에 접근하여 정의한걸 

네임스페이스로 만들면 이렇게 한 번에 접근할 수도 있습니다. 

 

▣ 이번에는 namespace에 변수와 함수를 정의하여 각각 만들어서 출력해보겠습니다. 

good1::num처럼 출력을 하게 되면 처음 int num;에 선언되어 있는 0에 처음 값으로 출력됩니다.

그 이유는 네임스페이스 안에 있는 함수를 정의하지 않았기 때문에 namespace에 있는 전역에 

변숫값만 출력되게 됩니다. 

 

▣ 그럴 때에는 이런 식으로 main함수에서 good1::fun() 네임스페이스 함수를 호출하게 되면

비어 있던 변수에 값에 함수가 호출된 코드에 num = 10에 정의로 코드를 실행하게 됩니다. 

여기서 중요한 건 꼭 코드에 순서를 살펴보셔야 합니다.

 

▣ 이렇게 good2 네임스페이스 안에서 good::num = 20처럼 다른 네임스페이스에 코드를 정의해서 

good1::fun() 호출하고

good2::fun() 호출을 다르게 해서 각각 결과물을 보면 

변숫값이 바뀐 걸 볼 수 있습니다. 

 

▣ 이렇게 네임스페이스를 중첩으로 정의를 하고 good1::fun() 함수와

good1::good2::fun() 함수를 정의해주고 난 후에 

 

▣ 그리고 good1::fun() , good2::fun()을 함수를 호출해서 

cout으로 출력을 해보면 처음 정의했던 함수 good1::fun()에 10을 정의한 변수에 값이

good1에 있는 int num1, num2 중에 num1값에 10이 들어가는 걸 볼 수 있고,

good2에서 정의했던 num1 = 20, num2 =30에 값 중에 num2에 값은 good1에 변수에 

대입되는 걸 확인할 수 있습니다.

네임스페이스 중첩에 이 부분들을 꼭 따라가시면서 만들어주세요.

728x90
반응형

댓글