최상단 광고

2012년 4월 16일 월요일

[C++강좌] - 1-5-1. namespace에 대해

예상외군요;; 
inline함수의 활약 때문인지 생각보다 강좌가 많이 짧아진것 같네요.
아마 2단원까지는 오늘안에...후훗.ㅋㅋ;;
고고~!!

*이 강좌는 C언어를 끝냈다는 가정하에 실시합니다.

 ┌───────────────┐
---앞으로의 목차---
5. namespace에 대해
2-1. bool형에 대해
2-2. Reference란.
└───────────────┘

<지난 강좌를 살펴보고 와주세요 !! : http://blog.naver.com/owndks98o/120155692576  >

1-5-1. namespace에 대해
지금껏 C만을 공부해 오신 분들이라면 namespace란것이 굉장히 생소할 것이라 생각합니다.
왜냐하면, namespace란 것은 오로지 C++에만 존재하는 것이기 때문이지요.
그렇다면 namespace, 그 기능을 알아볼까요?

먼저, namespace가 뭔지 알아야 겠죠?

"아파트 101동과 102동에 leanix란 아이가 살고 있습니다. 둘다 이름이 같아서 앙숙이지요.
어느날 아파트 밖에서 한 아이가 이름을 부릅니다.
leanix야~ 놀자~
두 leanix는 동시에 대답을 하였고, 서로서로가 더더욱 기분이 나빠졌습니다."

위와 같은 극단적으로 유치찬란한 이야기로 비유해 봅시다.
여기서 여러분이라면 과연 leanix를 어떻게 불렀을까요?
창의적이신 여러분이라면 과연 어떻게 하실지 궁금하지만, 전 아마 이렇게 불렀을 것입니다.

ㅇㅇㅇ동에 사는 leanix야 놀자~

이러면 누굴 부르는지 바로 알수 있지 않나요? 이것이 바로 namespace의 원리입니다.
즉, namespace란
"특정 영역의 범위를 지정하고 이름을 붙여준것"
으로 정의할수 있습니다.

간단한 예를 통해 확인해 보죠.

#include

void call(){
std::cout<<"101동 leanix! 야 나와!"<
}

void call(){
std::cout<<"102동 leanix! 야 놀자!"<
}

int main(){
call();
return 0;
}

위 예제는 인자값과, 함수명이 동일하기 때문에 함수 오버로딩도 성립하지 않습니다.
따라서 에러를 일으키게 되죠.

어쩌면 함수명을 바꿔주는 것이 가장 현명한 방법일지도 모르지만, 우리는 다른 해결책으로 접근해 봅시다.
바로 namespace의 사용이죠.

/*
namespace.cpp
*/

#include

namespace A101{
void call(){
std::cout<<"101동 leanix! 야 나와!"<
}
}

namespace A102{
void call(){
std::cout<<"102동 leanix! 야 놀자!"<
}
}

int main(){
A101::call();
A102::call();
return 0;
}

위 예제는 자칫 안된다고 오해할 요지가 있습니다.
하지만 함수 오버로딩은 이름공간상에서도 성립하기 때문에 옳은 예제가 됩니다.

main함수를 보면
A101::call();
과 같은 함수의 호출문이 등장합니다.

간단하게 생각하셔도 된답니다! A101동의 call을 호출하라! 간단한 의미죠?
그렇다면 namespace에서는 함수의 선언과 정의를 어떻게 분리시킬까요??

/*
namespace2.cpp
*/

#include

namespace A101{
void call();
}
namespace A102{
void call();
}

int main(){
A101::call();
A102::call();
return 0;
}

namespace A101{
void call(){
std::cout<<"101동 leanix! 야 나와!"<
}
}
namespace A102{
void call(){
std::cout<<"102동 leanix! 야 놀자!"<
}
}

간단합니다! 그저 namespace도 위와 같이 두번에 나눠적어주면 되는거죠!

강좌의 길이상, 1-5-2에서 뵙겠습니다!!

댓글 없음: