{
클래스의 일부가 되게끔 디자인된 비멤버 함수의 경우, 클래스와 같은 네임스페이스 내에 넣어야 한다는 것이다.
왜!?
C++의 이름 검색 시스템 때문이다. 이 이름 검색 시스템은 Koenig lookup 라고도 불린다.
해당 사항을 자세히 말해 줄 수 있는가?
물론 말해 줄 수 있다. Exceptional C++ 항목 31 ~ 항목 34 에 무척 자세히 나와 있고, ikpil.com 에서 검색해도 어느 정도 나오니 한번 검색해 봄이 좋을 것 같다.
넣게 되면 무엇이 좋아 지는가?
최소한 컴파일러가 혼란을 겪는 것을 줄여 주고, 개발자 또한 혼란을 겪는 것을 줄여 줄 수 있다.
간략하게만 소개해 줄 수 있나?
여기서 볼수 있듯이 swap() 함수를 정의 하고 swap() 을 호출했는데 내가 정의한 swap()은 호출 되지 않고 std::swap 중 가장 알 맞은 녀석으로 호출 된다.
std::를 명시하지도 않았는데, 이게 무슨 쌩뚱 맞은 현상인가?
바로 Koenig lookup 때문인데, 함수의 인자의 네임스페이스로 해당 함수를 자동으로 검색한다. 또한 함수 내부에선 그 네임스페이스 역시 보이게 된다. 자세한건 다시 말하지만 Exceptional C++ 항목 31 ~ 34 에 나온다는 것을 기억하라~ ikpil.com 에 정리해 두었기도 하고. ㅋ
이 때문에, 타입과 그에 따른 비멤버 함수는 같은 네임스페이스에 넣어서 혼란을 막으라는 것이다. : )
}
최근댓글