Programming Language/C/C++

[C/C++] namespace 제대로 사용하기

깐요 2017. 5. 23. 18:34

외부 전역 변수를 사용하지 말고, 이름이 namespace에 있는 변수를 사용한다

변수의 출처가 명확해진다


정적 전역 변수을 사용하지 말고, 이름이 무명 namespace에 있는 변수를 사용한다

static int a;

보다는

namespace
{
    int a;
}

를 사용한다


함수 또는 클래스 라이브러리 개발하는 경우, 그들을 하나의 namespace에 넣는다

실제로 C++ 표준 라이브러리 함수들은 std라는 namespace에 넣을 것을 요구한다


using 지시자 사용을 피한다


//using 지시자보다는
using namespace std;

//using 선언이나 사용 범위 연결 연산자(::)를 사용한다
using std::wcout;
using std::wcin;

wcout << L"안녕하세요. 양배추한닢입니다." << std::endl;

일반적으로 사용할 수 있게 하려는 것이 무엇인지 분명하게 나타내 주는 using 선언이나 사용 범위 결정 연산자(::)를 사용하는 것이 더 안전하다

namespace와 선언 영역이 둘 다 같은 이름을 가지고 있다고 가정하자

(선언 영역이란 어떤 변수를 선언할 수 있는 영역이다. ex 블록 안에서 선언된 변수는 그 블록이 선언 영역)

using 선언을 사용하여 그 이름 공간에 있는 이름을 선언 영역으로 불러오려고 시도하면, 두 이름이 충돌하여 에러가 발생한다

그에 반해 using 지시자를 사용하여 그 namespace에 있는 이름을 선언 영역에 불러오면 그 이름의 지역 버전이 namespace 버전을 덮어쓴다

(오류의 발생 원인을 파악하기 힘들다)


using 지시자를 헤더 파일에 사용하지 않는다

헤더 파일에서 using 지시자를 사용하게 되면 어떤 이름들을 사용할 수 있게 하는지 알 수 없다

그리고 헤더 파일들의 순서가 행동에 영향을 미칠 수 있다

부득이하게 using 지시자를 사용한다면 전처리기 지시자 #include 뒤에 놓는다


using 선언에 대한 전역 범위 대신 선택적으로 지역 범위를 사용한다





간단한 프로그램을 관리할 때는 위와 같은 규칙을 무시해도 괜찮다

하지만 규모가 큰 프로그램을 관리할 때는 이야기가 달라진다

한 두명이 아닌 다양한 사람들과 하나의 프로그램을 만들기 때문에 namespace를 이용한 무언의 소통이 필요하다

처음에는 어색할지 몰라도 점차 익숙해지도록 노력해보자

동료간의 원활한 작업과 일정 관리에 힘이 되어줄 것이다

320x100