E D R , A S I H C RSS

Simple Delegation

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

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:02
Processing time 0.0163 sec