▣ 안녕하세요
이번장에서는 네임스페이스를 공부해보겠습니다.
네임스페이스는 쉽게 정의하면 동일한 이름으로 변수나 함수, 배열 등을 사용할 때
소속을 지정해 그걸 구분하기 위한 키워드라고 생각하시면 됩니다.
그럼 간단한 코드를 통해서 하나하나 공부해보겠습니다.
▣ 공부하기 전에 꼭 전역 변수, 지역변수를 공부하고 시작해주세요.
▣ 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에 변수에
대입되는 걸 확인할 수 있습니다.
네임스페이스 중첩에 이 부분들을 꼭 따라가시면서 만들어주세요.
'[ C++ ] > - C++ 실습연습' 카테고리의 다른 글
C++ [클래스_02, Class, get, set, 함수, 멤버함수, 멤버변수] (0) | 2021.07.21 |
---|---|
C++ [클래스_01, Class, 객체, 멤버변수, 멤버함수, 접근지정자] (2) | 2021.07.20 |
C++ [디폴트 매개변수] (0) | 2021.07.13 |
C++ [for문, 포인터, 레퍼런스변수] (0) | 2021.07.09 |
C++ [함수 오버로딩] (0) | 2021.07.02 |
댓글