'이름공간'에 해당되는 글 2건

  1. 2007.11.21 <C++> 편의를 위한 Using 의 쓰임
  2. 2007.11.21 <C++> Namespace (이름공간)
。공부 。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;를 쓴다면 막지는 않겠지만 위처럼 자신에게 필요한 함수들만을 선언해 쓰는것을 추천하고싶다.
신고
Posted by kyoe
。공부 。2007.11.21 22:47
Namespace란 말그대로 '이름 공간'이라는 것이다. 우리가 예를 들어 어떤 프로젝트를 팀을 나눠서 진행을 했다고 하고 프로젝트 마감일에 모여 서로의 프로그램을 합쳤다치자 그때 우리는 중복되는 함수이름이나 변수명들을 발견한다. 이럴때 어떤한팀이 손해를보고 함수명과 변수명을 고친다고 하면 여간힘든일이 아닐것이다 물론 작은프로젝트일 경우엔 피해가 덜하겠지만 큰프로젝트라고 하면 대략 난감이다..;;
이를 대비해서 우리는 namespace라는 키워드를 사용해 이름공간을 선언한다.

- 아래 예를 통해서 namespace(이름공간)을 사용하는법을 알아보자. -
#include <iostream>      //신 버전의 해더 선언 'iostream.h'는 구버전의 헤더이다.

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

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

int main(void){
    A_kyoe::function();      // ' :: ' 범위연산자를 이용해 A_kyoe 안의 function()함수를 사용한다.
    B_kyoe::function();
    return 0;
}

위의 예제에서는 중복되는 함수 function()함수가 있다. 만약 namespace를 선언하지 않은 상태에서라면 당연히 컴파일 에러가 날것이다 하지만 namespace를 선언함으로써 A_kyoe 공간과 B_kyoe공간 안에 각각의 function()함수를 선언해 넣었기때문에 함수명은 같지만 둘은 서로다른 공간에 존재하는 함수가 되는것이다.
신고
Posted by kyoe

티스토리 툴바