SW/C++

[ C++ ] namespace에 대해 알아볼까요?

얇은생각 2018. 12. 15. 08:00
반응형

C++ 공부를 하면 namespace라는 문법을 자연스럽게 접합니다.

하지만 정확한 의미를 모르고 using namespace std 라고 입력할 뿐입니다.

화면에 자열을 출력할 때 필요한 규칙 정도로 생각하고는 합니다.


네임스페이스는 지정한 라이브러리를 사용할 수 있도록 소속을 알리는 역할을 합니다.


using namespace std


using 키워드로 std 라이브러리에 포함된 내용들을 사용할 것이라고 선언합니다. 

따로 소속을 알리지 않아도 사용할 멤버가 std 라이브러리에 포함된 것으로 간주하게 됩니다.


만약 using 키워드로 네임스페이스를 지정하지 않고 cout을 활용한다면 어떻게 될까요?

std::cout 처럼 std 라이브러리에 포함된 멤버임을 알려주어야 합니다.


다음은 네임스페이스를 활용한 간단한 예입니다.


#include <iostream>
using namespace std// std 네임스페이스 지정
 
int main()
{
    int i = 0;
    cin >> i; // 숫자 키보드 입력 받기
    cout << i; // 입력 받은 숫자를 화면에 출력하기
    return 0;
}
 
cs


아래는 cout으로 범위를 좁혀 네임스페이스를 지정한 예제입니다.

cin은 범위에 없으니 에러가 나겠죠


#include <iostream>
using std::cout// cout으로 범위를 좁혀 네임스페이스 지정
 
int main()
{
    int i = 0;
    cin >> i; // 컴파일 오류 발생
    cout << i; 
}
 
cs


다음과 같이 네임스페이스를 직접 정의할 수 있습니다.


namespace 네임스페이스 명
{
    선언내용;(클래스, 함수, 변수 등을 정의)
}
 
cs


다음 예제는 first, second 네임스페이스의 각각 같은 이름의 변수를 정의합니다.

범위 지정자 :: 를 활용해서 그 값에 접근하는 것을 확인할 수 있습니다.

using namespace first 라고 선언한다면 first:: 를 생략할 수 있습니다.


#include <iostream>
using namespace std;
 
// first 네임스페이스 정의
namespace first
{
    int value = 1;
}
 
// second 네임스페이스 정의
namespace second
{
    int value = 2;
}
 
int main()
{
    cout << first::value; // 1을 출력
    cout << second::value; // 2를 출력
}
 
cs



반응형