본문 바로가기
프로그래밍 언어/C++

[C++] 네임스페이스(namespace) 활용

by 까망 하르방 2022. 8. 9.
반응형

:: 』 기호는 Scope Operator로 "범위지정 연산자" 라고 한다.

(네임스페이스 지정할 때 사용하는 연산자)

#include <iostream>

namespace A
{
    void Print()
    {
        printf("a...\n");
    }
}

namespace B
{
    void Print();
}

int main()
{
    A::Print();
    B::Print();
}

void B::Print() // 선언부와 정의부 구분
{
    printf("b...\n");
}

 

여러 사람이 작업을 하다보면 변수나 클래스명이 같을 수 있다.

namespace로 영역을 구분할 수 있다.

 

동일한 영역에서 정의된 함수 호출할 때는

네임스페이스를 명시할 필요가 없다.

 

 

네임스페이스 중첩

#include <iostream>

namespace A
{
    void Print()
    {
        printf("a...\n");
    }

    namespace SubA
    {
        void Print()
        {
            printf("Sub a...\n");
        }
    }
}

int main()
{
    A::SubA::Print(); // Sub a...
}

 

 

using 키워드 활용

해당 네임스페이스를 참조할 때마다

키워드를 명시하는 것이 부담스러울 수 있다.

using 키워드로 선언된 영역 명시하는 수고를 덜 수 있다.

#include <iostream>

namespace A
{
    void Print()
    {
        printf("a...\n");
    }
    namespace SubA
    {
        void Print()
        {
            printf("Sub a...\n");
        }
    }
}

int main()
{
    using namespace A::SubA;

    Print(); // Sub a...
}

선언된 영역에서 유효한 것이기 때문에

전체 영역에 적용하려면 전역 위치(함수 밖)에서 사용하면 된다.

이름 충돌될 확률이 높아지기에 상황에 따라 대처해야 한다.

 

 

namespace 별칭

using 대신에 네임스페이스 별칭으로

길거나 중첩된 네임스페이스를 간소화할 수 있다.

#include <iostream>

namespace A
{
    void Print()
    {
        printf("a...\n");
    }
    namespace SubA
    {
        void Print()
        {
            printf("Sub a...\n");
        }
    }
}

int main()
{
    namespace AA = A::SubA;

    AA::Print(); // Sub a...
}

 

 

지역변수와 전역변수 구분

『 :: 』 로 전역변수와 지역변수를 구분할 수 있다.

#include <iostream>

using namespace std;

int val = 10; // 전역 변수

int main()
{
    int val = 20; // 지역 변수

    cout << val << endl; // 20 (지역)
    cout << ::val << endl; // 10 (전역)
}
반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] constexpr 키워드  (2) 2024.04.01
[C++] explicit 키워드  (0) 2023.01.20
[C++] 인라인(inline) 함수  (0) 2022.08.06
[C++] 디폴트 파라미터(default parameter)  (0) 2022.08.05
💻 함수 오버로딩(Overloading)  (0) 2022.08.03

댓글