。공부 。

<C++> 편의를 위한 Using 의 쓰임

kyoe 2007. 11. 21. 23:10
Using 란 사용하겠다라는 건데 이걸 C++에서는 어떻게 쓸까?
namespace를 사용해 이름공간이라는것을 만들수 있다 이 이름공간이라는 것을 만들어 사용하기 위해선 반드시 namespace(이름공간)의 이름을 붙여줘한다 하지만 매번 AA::function() 이런식으로 붙여쓰면 코딩도 지저분해질뿐더러 왠지 지저분해 보인다. 물론 그렇게 쓰는게 나쁘다는것은 아니다 나중에 길어진 소스를 해석할땐 오히려 붙여쓰는게 해석할때 도움이 될수도 있기때문이다.

- Using 의 사용예 -

#include <iostream>

namespace A_kyoe{        //A_kyoe이라는 이름 공간
    void function(void){
        std::cout<<"A_kyoe 에서 정의한 함수"<<std::endl;
    }
}

using A_kyoe::function;    //using을 이용해서 function함수를 간단히 쓰겠다고 정의

int main(void){
    function();            //이름공간의 이름을 안써줘도 된다.
   return 0;
}

위 예제에서 using 함수를 이용해서 A_kyoe::function(); 이렇게 접근해 사용해야할 function() 함수를 간단히 function(); 이런식으로 접근할수 있는것을 알수 있다.
여기서 우리는 std::cout 이라는것에 눈길이 갈수밖에 없다. 그렇다 cout이라는 함수 역시 이름공간 std안에 정의 되어있는 함라는것이다. 이밖에 cin, endl, 등등이 이 std 라는 이름공간안에 정의 되었다. 그렇다면 우리는 cin,cout,endl 함수를 구버전 헤더에서 쓰던것처럼 간단히 쓸수 있다.
using std::cin;
using std::cout;
using std::end;
이렇게 정의해주면 std::cout<<"namespace명칭을 붙여쓴경우:<<std::endl; 굳이 이렇게 쓰지않아도
cout<<"using로 정의해 쓴 경우:<<endl; 이렇게 구버전처럼 쓸수가 있다.
위처럼 세줄에 걸처 쓰지않고  using namespace std; 이렇게 정의해주면 한번에 해결된다 이렇게 쓰면 std안에 있는 모든 함수와 변수를 이름공간에 제약받지 않고 쓴다는 것이다 하지만 이렇게 쓰게되면 이름공간이라는게 무색하게 된다 우리는 충돌을 막기위해 이름공간이라는것을 쓰고 있는데 이렇게 써버리면 namespace가 있을필요가 없게 된다 굳이 using namespace std;를 쓴다면 막지는 않겠지만 위처럼 자신에게 필요한 함수들만을 선언해 쓰는것을 추천하고싶다.