C++의 네임 스페이스

Jinku Hu 2023년10월12일
  1. namespace키워드를 사용하여 C++에서 새 네임 스페이스 만들기
  2. 중첩 된 네임 스페이스를 사용하여 C++에서 복잡한 범위 구현
C++의 네임 스페이스

이 기사에서는 C++에서 네임 스페이스를 사용하는 방법을 설명합니다.

namespace키워드를 사용하여 C++에서 새 네임 스페이스 만들기

C++에는 이름 충돌이라는 대규모 프로젝트의 일반적인 문제를 방지하는 데 도움이되는 네임 스페이스 개념이 있습니다. 주어진 프로젝트가 독립적 인 팀이 개발 한 서로 다른 라이브러리를 사용하고 서로 다른 개체에 대해 많은 전역 이름을 가지고있는 경우 일부 이름이 일치하여 오류가 발생하는 것은 불가피합니다. 네임 스페이스는 특정 이름의 함수 또는 기타 개체가 정의되는 범위를 선언합니다. C++에는 여러 코드 영역에서 개체 이름이 표시되고 사용 가능한 방식을 제어하는 ​​자동 범위 규칙이 있습니다. 예를 들어, 함수에서 선언 된 지역 변수는 함수 본문 외부에서 보거나 액세스 할 수 없습니다. 따라서 동일한 이름을 가진 다른 변수를 충돌없이이 함수의 본문 외부에서 선언 할 수 있습니다. 다른 한편으로, 우리는 하나의 글로벌 스코프로서, 파일이나 기능에서 특정 객체를 사용할 수 있도록 대형 프로그램에서 자주 사용합니다. 이제 수동 범위 지정 메커니즘이없는 공간을 어떻게 관리 할 수 ​​있는지 상상해보십시오.

사실 프로그래머는 전역 객체에 대해 매우 긴 이름을 사용하여 이름 충돌을 처리했습니다. 비교적 작은 규모의 프로젝트에서 작동 할 수 있지만 코드를 읽기가 매우 지저분하게 만들고 솔루션은 조율 된 명명 체계 없이는 이름 충돌을 방지 할 수 없습니다.
네임 스페이스는 전역 범위 (결과적으로 네임 스페이스라고 함)를 분할하는 메커니즘을 제공합니다. 네임 스페이스는namespace키워드와 네임 스페이스 이름 자체로 선언됩니다. 그런 다음 펑션 블록과 유사한 중괄호 안에있는 코드를 따라 가며 세미콜론없이 끝납니다. 동일한 자동 범위 규칙이 코드의 다른 부분과 마찬가지로 네임 스페이스 내의 변수를 제어합니다. 네임 스페이스 외부에서 액세스해야하는 개체 이름은 정의 된 네임 스페이스 이름으로 시작해야하며 그 뒤에 이중 콜론 표기법과 개체 이름이 와야합니다. 다음 코드 예제는 동일한 파일의 네임 스페이스에 대한 기본 사용 사례를 보여줍니다.

#include <iostream>

using std::cout;
using std::endl;

namespace dinno {
int var1 = 456;
}

int main() {
  int var1 = 123;

  cout << var1 << endl;
  cout << dinno::var1 << endl;

  return EXIT_SUCCESS;
}

출력:

123
456

중첩 된 네임 스페이스를 사용하여 C++에서 복잡한 범위 구현

루프 문과 유사하게 네임 스페이스를 중첩 할 수 있습니다. 기본적으로 중첩 된 네임 스페이스는 외부 네임 스페이스의 개체 이름에 액세스 할 수 있지만 후자 (부모 ​​네임 스페이스라고도 함)는 내부 네임 스페이스의 멤버에 액세스 할 수 없습니다. 그러나 내부 네임 스페이스 선언 앞에inline키워드를 지정하여 상위 네임 스페이스에서 멤버에 액세스 할 수 있도록 할 수 있습니다. 네임 스페이스는 다른 위치에서 정의 할 수 있습니다. 즉, 다음 예제에서dinno네임 스페이스가 정의되었으므로 동일한 네임 스페이스 정의가 다른 파일 또는 단일 파일의 개별 위치에 걸쳐있을 수 있습니다.

#include <iostream>

using std::cout;
using std::endl;

namespace dinno {
int var1 = 456;
}

namespace gini {
int var1 = 980;

namespace bean {
int var1 = 199;
}
}  // namespace gini

namespace dinno {
int var2 = 990;
}

int var1 = 123;

int main() {
  cout << var1 << endl;
  cout << dinno::var1 << endl;
  cout << gini::var1 << endl;
  cout << dinno::var2 << endl;
  cout << gini::bean::var1 << endl;

  return EXIT_SUCCESS;
}

출력:

123
456
980
990
199
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook