[Modern C++] 1. 이름공간(Namespace)

윤정민·2023년 6월 22일
0

C++

목록 보기
6/46

1. 이름공간(Namespace)

namespace: 정의된 객체가 어디 소속인지 지정하는 역할

  • 아래 코드처럼 같은 이름의 함수라도 namespace를 사용해 구분 가능
  • 서로 다른 코드 모듈이 충돌에 대한 걱정 없이 변수, 메서드 등에 대한 원하는 이름을 사용 가능함
#include "header1.h"
#include "header2.h"

int main()
{
    header1::foo();	//header1의 foo
    header2::foo();	//header2의 foo
}

2. 이름 없는 이름 공간

이름 없는 이름 공간을 설정할 경우, 정의된 것들은 해당 파일 안에서만 접근할 수 있게 된다. 마치 static 키워드를 사용한 것과 같은 효과를 가진다.

  • 다른 파일에서 header를 통해 해당 파일에 접근하더라고 이름없는 이름 공간에 정의된 것들은 사용 불가
#include <iostream>

namespace {
// 이 함수는 이 파일 안에서만 사용할 수 있다.
// 이는 마치 static int OnlyInThisFile() 과 동일하다.
int OnlyInThisFile() {}

// 이 변수 역시 static int x 와 동일합니다.
int only_in_this_file = 0;
} // namespace

int main() {
    OnlyInThisFile();
    only_in_this_file = 3;
}

3. 사용할 이름공간 선언

using namespace std

  • std라는 네임스페이스에 선언된 모든 식별자들을 현재 코드 범위에 허용하는 코드
  • 이 선언 이후 std::를 붙이지 않고 std 내 식별자들을 사용 가능

3.1. 단점

사용자가 작성한 코드에 std 네임스페이스에 존재하는 동일한 이름의 변수나 함수가 있을 때 해당 변수나 함수가 의도와 다른 코드를 참조하게 될 수 있다. 그렇기 때문에 using namespace stdusing namespace의 좋은 사용 습관은 아니다. std가 필요한 경우 std::를 사용하자

profile
그냥 하자

0개의 댓글