상태이상 : 호기심 중독

이것저것 알아두면 언젠간 도움이 된다.

코딩/C++

namespace? [c++]

IT코코아 2018. 3. 4. 09:00

namespace는 학급과 비슷하다고 생각 하면 됩니다. 
예를 들어 학교 동급생들 중에 자신과 같은 이름을 가진 사람이 몇몇있을 때. 헷갈리지 마라고 '몇반 누구가' 라는 식으로 구분 할 수 있도록 이름 앞에 반을 붙여 말하는 것처럼, namespace도 같은 맥락에서 나온 기능 입니다. 

namespace의 역할?

쉽게말해, 코딩을 할 때 같은 이름의 함수나 변수를 한 곳에 선언을 하지 못하는데 namespace안에 (묶어)선언해서 바깥쪽과 구분되도록 하는 기능입니다. 일단 namespace에 선언하는 것을 해봅시다.

#include <iostream>
namespace A{
	void fnc(){
    	std::cout<<"A의 fnc()가 호출되었습니다."<<std::endl;
    	}
}
int main(){
	return 0;
}

선언시 주의할 점은 main함수 안에는 namespace가 만들어지지 않는다는 것을 주의합시다.
위와 같이 namespace 이름{함수, 변수 등등 선언}을 틀로 사용합니다.

그럼 A안에 fnc()를 어떻게 호출하는지 확인해 봅시다.
main부분을 아래와 같이 채운 후, 실행 시켜 봅시다.

int main() {

	A::fnc();

	return 0;
}

정상적으로 A안의 fnc()함수가 호출이 된 것을 확인할 수 있습니다.
선언한 namespace의 멤버에 접근 할 때, ::(접근연산자)를 사용하여 접근합니다. 이로써 같은이름의 함수도 namespace를 이용하여 사용할 수 있게 됩니다.

namespace는 여러명이 코딩을 하여 서로의 소스를 이용할 때 서로 함수명을 겹쳐 코딩을 했을 경우에 유용하게 사용됩니다.
namespace는 using이라는 지시문을 사용하여 편하게 사용할 수 있습니다.
매번 namespace안의 함수에 접근할 때 접근지정자(::)를 사용하는 것이 번거러울 경우, using을 사용합니다.

#include <iostream>

namespace A {
	void fnc() {
		std::cout << "A의 fnc()가 호출되었습니다." << std::endl;
	}
}

using namespace A;

int main() {

	fnc();

	return 0;
}

using 지시문은 무조건 사용하고자하는 namespace가 위에 선언 되어있어야 하므로(위에서 아래로 컴파일 하니까) namespace선언부 아래에 사용하며 main밖에 씁니다. 
using 지시문에 의해 namespace A를 접근연산자 없이 A안의 함수를 호출 할 수 있게 됩니다.

안 그래도 전 포스트에 입출력 할 때 std::cout, std::cin을 이용 할 때 마다 접근연산자를 사용해서 많이 귀찮고 불편했을 겁니다. 
iostream안의 입출력 함수들은 모두 namespace std로 묶여 있습니다. 그러면 우리는 앞으로 코딩을 하기전에 iostream을 사용 한다면

#include <iostream>
using namespace std;
int main(){

}

이렇게 치고 하면 편하게 코딩을 할 수 있겠죠?


정리.

  • namespace는 같은 이름의 함수, 변수 등등을 구분하여 사용하기 위해 나온 기능.
  • namespace선언
    • namespace 이름 {
       함수, 변수 등등 선언
      }
    • 선언은 main함수 밖에 가능.
  • main함수에서 호출.
    • namespace 이름::함수(변수 등등).
  • using 지시문
    • 많이 사용하는 namespace를 접근연산자없이 안에 편하게 접근하도록 하는 기능.
    • using namespace 이름;
    • using지시문 사용시 위쪽에 using 지시문에 포함되는 namespace가 선언 되어있어야 한다.

+ iostream안의 입출력 함수들은 namespace std 안에 묶여있으니 using namespace std;를 애용하자!

반응형

'코딩 > C++' 카테고리의 다른 글

디폴트(default) 매개변수 [c++]  (0) 2018.03.06
함수의 오버로딩 [c++]  (0) 2018.03.05
입출력을 해보자! [c++]  (0) 2018.03.03