주간 팁 #119: using 선언과 네임스페이스 별칭 사용하기

원래 게시일: 2016-07-14
작성자: Thomas Köppe (tkoeppe@google.com)

이 팁은 .cc 파일에서 using 선언과 네임스페이스 별칭을 작성할 때 발생할 수 있는 미묘한 문제를 피하기 위한 간단하고 견고한 방법을 제공합니다.

요약

권장사항:

  1. 헤더 파일에서 네임스페이스 별칭이나 using 선언을 사용하지 마십시오.

    • 이러한 별칭은 구현자나 구현을 읽는 사람을 위한 편의 기능으로만 사용되어야 하며, 내보내는 API의 일부가 아닙니다.
  2. 별칭 선언은 가장 안쪽 네임스페이스(익명 네임스페이스 포함) 안에 배치하십시오.

    • 별칭 선언을 위해 익명 네임스페이스를 새로 만들지 마십시오.
  3. 별칭을 선언할 때 항상 완전히 수식된 이름(앞에 ::가 붙은 이름)을 사용하십시오.

    • 단, 현재 네임스페이스 안의 이름을 참조하는 경우는 예외입니다.
  4. 다른 이름을 사용할 때는 불필요한 완전 수식을 피하십시오.

    • 관련 정보는 TotW 130에서 확인하세요.

배경

C++는 이름을 네임스페이스로 구성합니다.
이 기능은 코드베이스가 커지더라도 이름 충돌을 방지하며, 소유 범위를 명확히 합니다. 그러나 네임스페이스는 종종 foo::Bar처럼 긴 이름을 만들게 되어 코드가 복잡해질 수 있습니다. 이를 완화하기 위해 짧은 미수식 이름(Bar)을 사용하는 것이 유용하며, 긴 네임스페이스를 별칭으로 정의하는 방법(namespace eu = example::v1::util)도 자주 사용됩니다.


문제

1. 별칭의 범위 문제

예를 들어:

CPP
using ::foo::Quz;

namespace example {
namespace util {

using ::foo::Bar;
클릭하여 더 보기

2. 상대적인 이름 사용 문제


익명 네임스페이스 사용하기

익명 네임스페이스에 별칭 선언을 배치하면, 다음과 같은 이점이 있습니다:

  1. 충돌 가능성이 줄어듭니다.
  2. 별칭 선언이 파일의 논리적 구성을 유지합니다.

예:

CPP
namespace example {
namespace util {

namespace {

// 모든 `using` 선언을 여기에 모읍니다.
using ::foo::Bar;
using ::foo::Quz;

}  // namespace

// 이제 이곳에서도 `Bar`와 `Quz`를 사용할 수 있습니다.
클릭하여 더 보기

결론

라이선스

저작자: Jaehun Ryu

링크: https://jaehun.me/posts/abseil-tip-119-using-%EC%84%A0%EC%96%B8%EA%B3%BC-%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%B3%84%EC%B9%AD-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

라이선스: CC BY 4.0

이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 출처를 밝히면 상업적 목적을 포함해 자유롭게 이용 가능합니다.

댓글

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키