본문 바로가기

핸들

(2)
항목 42 : 내부의 것은 너무 노출시키지 말라. ( Don’t give away your internals. ) { 내부의 것은 무엇을 말하는가? 바로 핸들을 말한다. 핸들이란 무엇인가? 차라는 녀석을 마음데로 움직이는 조종대 이다. 이 조종대를 왜 노출 시키지 말아야 하는가? 나라에선 차가 너무 유용하고, 위험하기에, 운전면허증을 따야지만 몰 수 있게 만들었다. 마찬가지다. 핸들 역시 아무에게나 잡을 수 있게 허락해 준다면, 위험해서 도로에 나오겠는가? .. 너무 비유만 하지 말고 C++ 로 설명해 해줘~ 소켓을 예로 들겠다. #include class CSocket { public: SOCKET get_socket() { return s_; } private: SOCKET s_; }; int main( void ) { CSocket s; SOCKET sock = s.get_socket(); closesocket..
항목 28: 내부에서 사용하는 객체에 대한 '핸들'을 반환하는 코드는 되도록 피하자. 이해하기 전에 알아야 하는 핸들이란? 다른 객체에 손을 댈 수 있게 하는 매개자를 지칭하며, 참조자등의 성격을 띄우고 있다.(외부 참조) 그렇다면 왜 '핸들'을 반환하는 코드를 피하는것일까? 쉽게 말해서 클래스 내부 멤버 변수는 private 으로 해야 한다고 배웠을 것이다. 그런데 멤버 변수에 대한 포인터나 레퍼런스를 반환하게 된다면, 그것이 const 로 한다해도, 외부에서 아주 손쉽게 변환을 가할수 있는 상태가 된다. 이 상태는 바로 캡슐화가 깨진 상태가 된다. 캡슐화가 왜 중요한지는 다들 알것이므로 생략한다. 저자 역시, 핸들을 반환해야 하는 어쩔수 없는 경우에만 핸들을 반환한다고 말한다. 어찌 되었던, 클래스 private에 넣는것을 간과하여, 코딩을 하면 안된다는 것을 알려 준다. 이것만은 잊..