이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프

IeF 제멋대로 세상

💻프로그래밍 내용 정리/C++17

[C++ 1.1.2] 네임스페이스(namespace, nested, alias)

2022. 8. 15. 01:02
728x90

네임스페이스

네임스페이스는 코드에서 이름이 서로 충돌하는 문제를 해결하기 위해 나온 개념이다.

코드를 네임스페이스 안에 담으려면 먼저 코드를 네임스페이스 블록으로 감싸야한다.

 

예를 들어 namespaces.h 파일에 담긴 내용을 다음과 같이 mycode란 네임스페이스로 묶을 수 있다.

namespace mycode {
    void foo();
}

 

네임스페이스는 함수나 메서드의 선언뿐만 아니라 구현 부분도 묶을 수 있다.

#include <iostream>
#include "namespace.h"

namespace mycode {
    void foo()
    {
    	std::cout << "foo() called in the mycode namespace" << std::endl;
    }
}

이처럼 foo()를 mycode 네임스페이스 아래에 두면 외부 라이브러리에 foo()가 있더라도 서로 구분할 수 있다.

네임스페이스를 적용한 foo()를 호출하려면 :: (스코프 지정 연산자)를 이용하여 함수 이름 앞에 네임스페이스를 붙인다.

mycode::foo(); // mycode 네임스페이스에 정의된 foo() 함수를 호출한다.

mycode 네임스페이스 블록 안에서 접근할 때는 네임스페이스를 접두어로 붙이지 않아도 된다.

 

using 지시자를 이용하면 네임스페이스 접두어를 생략할 수 있다.

컴파일러는 using 지시자를 보면 그 뒤에 나오는 문장부터는 using에 지정된 네임스페이스에 속하는 것으로 처리한다.

#include "namespace.h"

using namespace mycode;

int main()
{
    foo(); // mycode::foo();와 같다.
    return 0;
}

한 소스 파일에서 using 지시자를 여러 개 지정할 수 있다.

 

cout과 endl은 std 네임스페이스에 정의된 이름이다.

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, World: << endl;
    return 0;
}

 

네임스페이스 안에 특정한 항목만 가리키도록 using 문을 작성할 수도 있다.

 using std::cout;

 

C++17에서는 중첩된 네임스페이스를 좀 더 쉽게 사용할 수 있게 개선되었다.

중첩된 네임스페이스란 네임스페이스 안에 있는 네임스페이스를 말한다.

 

C++17 이전

namespace MyLibraries {
    namespace Networking {
        namespace FTP {
            /* ... */
        }
    }
}

C++17 

namespace MyLibraries::Networking::FTP {
    /* ... */
}

네임스페이스 앨리어스를 사용하면 네임스페이스의 이름을 다르게 표현하거나 기존 이름을 좀 더 짧게 만들 수 있다.

namespace MyFTP = MyLibraries::Networking::FTP;

 

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 1.1.5] 연산자(단항, 이항, 비트 연산자)  (0) 2022.08.15
[C++ 1.1.4] 변수, 캐스팅(동적 형변환, static_cast)  (0) 2022.08.15
[C++ 1.1.3] 리터럴  (0) 2022.08.15
[C++ 1.1.1] 주석, 전처리 지시자, main() 함수, I/O 스트림  (0) 2022.08.14
[C++ 1.1.0] C++ 컴파일러 설치와 사용법(Visual Studio 2022)  (0) 2022.08.14
    '💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
    • [C++ 1.1.4] 변수, 캐스팅(동적 형변환, static_cast)
    • [C++ 1.1.3] 리터럴
    • [C++ 1.1.1] 주석, 전처리 지시자, main() 함수, I/O 스트림
    • [C++ 1.1.0] C++ 컴파일러 설치와 사용법(Visual Studio 2022)
    이이프
    이이프
    게임 프로그래머 지망생 / Since 2022.08.14

    티스토리툴바