Simple Delegation ¶
위임을 사용할때, 당신이 필요한 위임의 묘미(?)를 분명하게 해주는 도와주는 두가지 이슈가 있다. 하나는, 위임하는 객체의 주체성이 중요한가? 이다. 위임된 객체는 자신의 존재를 알리고 싶지 않으므로 위임한 객체로의 접근이 필요하다.(?) 다른 하나는, 위임하는 객체의 상태가 위임된 객체에게 중요한것인가? 그렇다면 위임된 객체는 일을 수행하기 위해 위임한 객체의 상태가 필요하다.(너무 이상하다.) 이 두가지에 no라고 대답할 수 있으면 Simple Delegation을 쓸 수 있다.
그냥 예제나 보자.-_- 내가 봐도 무슨 말인지 모르겠다.
Collection처럼 작동하지만 더 많은 기능을 가지고 있는 객체를 만들고 싶다. 상속받지 말고, Collection을 지칭하도록 하자.(위임하도록 하자.)
~cpp class Vector { private: Array* elements; public: Vector(int size) { setElements(new Array(size)); } void setElements(Array* aCollection) { elements = aCollection; } void do( (void*) blockFunc() ) { elements->do(blockFunc); // Array에게로 위임 } };좀 이상하긴 하지만 그냥 그런가 보다 하자. C++은 너무 제약이 심하다. 어쨌든 at, at: put: 같은 메세지도 위처럼 위임이 가능하다.
위임하는 객체(delegating object)는 위임 객체 또는 위임자 객체, 위임된 객체(delegate)는 대리자로 번역할 수 있을 것 같고(차라리 영어를 그대로 쓰는게 좋을지도 모르겠네요), 주체성은 참조를 의미하지 않을까요?
객체의 주체성(?)에 대한 예를 들면(제대로 이해했는지는 잘모르겠지만... ^^;)
~cpp // 채팅방에서 나가기 위해 호출되어야 할 메소드 ChatClient::GoOutFromRoom() { Cmd* cmd = new OutFromRoomCmd(this); cmd->Execute(this); // delegating object의 참조(this)를 delegate에게 전달 }
이런 식으로 서버에게 참조를 전달하고 서버는 누가 보낸 메시지인지를 알기 때문에 처리 결과를 해당 클라이언트에게 보냅니다. 클라이언트는 서버가 보낸 처리 결과가 성공이면 UI를 업데이트하고 실패하면 메시지를 보여준다거나 하시는 식으로 처리할 수 있을꺼 같네요.--Benghun