SW 개발

[CPP 기본문법] using 정리

. . . 2009. 4. 14. 00:54
반응형
  • 출처 : 여기저기정리

using

다음의 예제는 A _COM이라는 이름공간 안에 존재하는 함수를 범위지정 연산없이 그냥 호출하고 있다.

#include <stdio.h> 

namespace A_COM { 
    void function(void) { 
        std::cout<<"A.COM에서 정의한 함수"<

using키워드가 사용된 줄의 선언은 다음과 같은 의미를 지닌다. "앞으로 function이라는 이름을 참조하는 코드가 나오면 A _COM이라는 이름공간 안에 선언된 function이라는 이름을 참조한다."

그래서 function()이 호출되면 컴파일러는 이 함수를 A _COM이라는 이름공간 안에서 찾게 된다.

다음 예제는 using을 사용한 또다른 예제이다.

#include <stdio.h>

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

int main(void) { 
    cout<<"Hello World!!"<

이 예제에서는 cout, cin 그리고 endl을 이름공간 std안에서 찾으라는 선언이 이뤄지고 있다. 따라서 cout과 endl을 범위지정 연산없이 참조하고 있다. 이미 cout과 endl이 이름공간 어디에 존재하는지 선언하였기 때문이다.

이번에는 키워드 using을 이용한 또다른 선언방법을 소개한다.

#include <stdio.h>

namespace A_COM { 
    void function(void) { 
        std::cout<<"A.COM에서 정의한 함수"<

using키워드를 사용한 부분은 앞의 예제와 의미가 다르다. 이것은 다음과 같은 의미를 지닌다. "A _COM안에 선언되어 있는 이름을 참조하는 경우에는 그것이 변수이건 함수이건 상관없이 이름공간에 대한 선언없이 참조한다."

앞에 소개되었던 예제를 훨씬 간결하게 다뤄본다.

#include <stdio.h>

using namespace std; 

int main(void) { 
    cout<<"Hello World!!"<

이 예제에서는 std안에 존재하는 이름들은 그냥 참조하겠다고 선언되어 있다. 따라서 이후부터는 cout과 endl에 범위지정 연산없이 접근이 가능하다.

당장 눈으로 보기에는 위의 using선언이 훨씬 좋아 보인다. 그러나 가급적이면 사용하고자 하는 함수 혹은 변수가 지정된 using선언을 이용하는 것이 좋다.

왜냐하면 이름공간 std안에는 다양한 종류의 선언이 존재하는데 함수 혹은 변수의 지정없이 using선언을 해버리면 프로그래밍 하기에는 조금 편리하겠지만 이름 충돌이 발생할 확률은 상대적으로 높아지기 때문이다.

또 다른 특징

int val=100; 

int main(void) { 
    int val=100; 
    val+=1; 

    return 0; 
}

위의 예제에는 동일한 이름의 전역변수와 지역변수가 정의되어 있다. 여기서 증가되는 변수는 지역변수이다.

main함수 내에서 전역변수의 값을 1증가시키고자 할 때는 범위지정 연산자를 사용해야 한다.

int val=100; 

int main(void) { 
    int val=100; 
    ::val+=1; 

    return 0; 
}

여기에는 범위지정 연산자가 등장하고 있다. 범위지정 연산자의 왼편에는 접근하고자 하는 이름공간, 그리고 오른편에는 접근하고자 하는 함수 혹은 변수의 이름이 오게 되어있다. 그런데 이 예제에서는 접근하고자 하는 이름공간이 존재하지 않는다. 이 것은 다음과 같은 의미를 지닌다.

"전역변수로 선언되어 있는 변수 val에 접근한다."

결국 전역변수의 값이 증가하게 된다. 이처럼 범위지정 연산자는 젼역변수에 접근하기 위한 용도로도 사용가능하다.

반응형