Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ChoosingMessage

From ZeroWiki

Choosing Message

뭐라고 주저리 주저리 많긴 한데... 결국 다형성 이야기다.


절차적 프로그램은 if-then-else나 switch-case같은 조건문으로 구현이 된다. 이렇게 구현된 것은 두가지 문제점을 가지고 있다. 하나는 기존 프로그램의 수정 없이는 새로운 기능을 추가할 수가 없고, 또 다른 하나는, 그러한 것은 전파되려 한다는 것이다.(? 고치면 파급 효과가 크다는 이야기같다.)


이에 반해, 메세지는 주제와 변수를 다루는 프로그램을 훈련된 방법을 제공해준다.(직역 열라 이상함.--; 누군가 좀..;;) 변수들이 서로 다른 오브젝트에 있으므로, 서로를 간섭할 기회가 많지 않다.


일단 안 좋은 코드를 보자. 기존의 절차적 프로그램에서나 볼 수 있는 코드다. 초보자들이 자주 이런다. 본인도 그렇다.--;

// MFC를 가정하자. C++ 표준에서 타입 알아오는 걸 까먹었다. CObject를 상속받은 것이다.
if( anEntry->IsKindOf(RUNTIME_CLASS(Film)) )
	responsible = anEntry->getProducer();	
else
	responsible = anEntry->getAuthor();

위의 코드를 Choosing Message 패턴을 써서 유연한 코드로 바꿔보자.

class Entry : public CObject
{
	Responsible& GetResponsible()
	{
		return author;
	}
};

class Film : public Entry
{
	Responsible& GetResponsible()
	{
		return producer;
	}
};
responsible = anEntry->GetResponsible();

SBPPSummary