블로그 이미지

[C++] Namespace 네임스페이스

2012. 8. 9. 17:04

1. Namespace

정의 : 특정영역(공간)에 이름을 붙여주기 위한 문법적 요소

원리 : 한 집에 철수라는 이름을 지니는 사람이 두 명 살고 있다면 이는 문제가 된다. 그러나 서로 살고 있는 집이 다르다면 문제될 것이 없다. 201호에 사는 철수와 202호에 사는 철수는 구분 지을 수 있기 때문이다. 다음과 같이 부르면 되기 때문이다. "202호에 사는 철수야!" 이것이 이름공간의 기본 원리이다.

예제)

 #include <iostream
namespace A_COM 
{ 
    void function(void) 
    { 
        printf("A.com에서 정의한 함수 \n"); 
    } 
} 

namespace B_COM 
{ 
    void function(void) 
    { 
        printf("B.com에서 정의한 함수 \n"); 
    } 
} 

int main(void) 
{ 
    A_COM::function();    //A회사에서 정의한 함수 호출 
    B_COM::function();    //B회사에서 정의한 함수 호출 
    return 0; 
}


2. scope resolution operator(범위 지정 연산자)   ::

A_COM::function();

"A_COM이라는 이름공간 안에 선언되어 있는 function 함수를 호출하라"


※전역 변수 호출 또한 가능하다

예제)?

int val = 100; 

int main(void) 
{ 
    int val=5; 
    val+=1;        //지역변수 val를 1 증가 
    ::val+=1;    //전역변수 val를 1 증가 
    printf("지역변수 val: %d \n", val); 
    printf("전역변수 val: %d \n", ::val); 
    return 0; 
}


3. using

using A_COM::function();

"앞으로 function이라는 이름을 참조하는 코드가 나오면 A_COM 이라는 이름 공간 안에 선언된 function이라는 이름을 참조하라는 뜻이다."

예제)

#include <iostream> 

namespace A_COM 
{ 
    void function(void) 
    { 
        std::count << "A.com에서 정의한 함수" << std::endl; 
    } 
} 

using A_COM::function; 

int main(void) 
{ 
    function(); 
    return 0; 
}



using namespace std;

"앞으로 등장 하는 어떤 함수든 std namespace를 참조하라."

"cout, cin 함수는 iostream의 std라는 네임스페이스 안에 정의 되어 있다."

예제)

#include <iostream> 

using namespace std;

int main(void) 
{ 
    int val1, val2; 
    int result = 0; 

    cout << "두개의 숫자 입력 :"; 
    cin >> val1 >> val2; 

    if(val1<val2)    //val2가 크다면. 
    { 
        for(int i=val1+1; i<val2; i++) 
            result+=i; 
    } 
    else            //val1이 크다면 
    { 
        for(int i=val2+1; i<val2; i++) 
            result+=i; 
    } 

    cout << "두 수 사이에 존재하는 정수의 합 :" << result << endl; 
    return 0; 
}