관리 메뉴

엘키의 주절 주절

커맨드 패턴 (Command) 본문

Software Engineering/Design Pattern

커맨드 패턴 (Command)

엘키 엘키 2008.02.09 13:19

객체의 내부 동작 하나 하나보다, 어떤 동작을 한다는 것 자체가 중요할 때가 있습니다. 캐릭터에게 행동을 시킬 때, 어떤 행동을 하는지는 중요하지 않고, 행동을 한다는 그 자체만 중요할 때가 바로 그렇습니다.

이렇게 행동을 일반화하는 것을 커맨드 패턴이라고 부르고, 캡슐화의 구현이라고 보셔도 좋습니다.

다만 일반 캡슐화와는 조금 다른것이, 커맨드 패턴은 한 클래스당 한가지 일만 시키는 경우가 많다는 것입니다. 동작 하나를 하나의 클래스로 관리함으로써, 다양한 동작을 관리하기 쉽게 하겠다는 것이지요.

class ICommand
{
public:
	virtual void Act() = 0;
};

class CharacterParent : public ICommand
{
protected:
	virtual CharacterParent * SearchTarget() = 0; //타겟찾기
	virtual void Act(CharacterParent *pCharaterParent) = 0; //공격
public:
	virtual void Act(){
		Act(SearchTarget());
	}
};

class Monster : public CharacterParent
{
	virtual CharacterParent * SearchTarget()
	{
		//사정거리내의캐릭터를찾는다.
	}

	virtual void Act(CharacterParent *pCharaterParent)
	{
		Attack(pCharaterParent);
	}

	void Attack(CharacterParent *pCharaterParent)
	{
		//파라미터로넘어온캐릭터를공격한다.
	}
};

class Pet : public CharacterParent
{
	virtual CharacterParent * SearchTarget()
	{
		//가장약한아군캐릭터를찾는다
	}

	virtual void Act(CharacterParent *pCharaterParent)
	{
		Heal(pCharaterParent);
	}

	void Heal(CharacterParent *pCharaterParent)
	{
		//파라미터로넘어온캐릭터를회복시킨다
	}
};

void Act(ICommand *pCommand)
{
	pCommand->Act();
}

외부에서는 캐릭터가 공격을 하던, 회복을 시켜주던 상관없습니다. 해당 캐릭터가 행동한다는 그 자체가 중요하죠.

이렇듯 객체의 내부 행동을 숨기고, 외부 인터페이스를 일반화하는 것을 커맨드 패턴이라 합니다.

'Software Engineering > Design Pattern' 카테고리의 다른 글

Design Pattern Quick Reference  (0) 2011.02.10
데코레이터 패턴 (Decorator)  (2) 2008.02.09
커맨드 패턴 (Command)  (0) 2008.02.09
플라이웨이트 패턴 (Fly Weight)  (0) 2008.02.09
프록시 패턴 (Proxy)  (0) 2008.02.09
스트래티지 패턴 (Strategy)  (2) 2008.02.05
0 Comments
댓글쓰기 폼