Coding/Unity, C#

Unity, Design Pattern: Command Pattern

Command Pattern

커맨드 패턴(Command pattern)은 어떤 요청을 객체로 만들어서 캡슐화해서 요청의 저장, 로깅, 취소를 할 수 있게 도와준다.

커맨드 패턴의 핵심인 Command interface는 아주 간단한 구조를 가지고 있다.

public interface Command
{
	public void execute();
}

간단한 구조를 가지고 있는 만큼, 사용자는 다양한 방식으로 자체 커맨드를 만들어서 보낼 수 있다. 예를 들어, 플레이어를 점프하게 만드는 커맨드를 보내고 싶다고 생각해보자. 그럼 먼저 그에 해당하는 커맨드를 구체적으로 정의한다.

public class JumpCommand : Command
{
	public void Execute()
    {
    	Console.WriteLine("Player jump is invoked.");
    }
}

그리고 이 커맨드를 커맨드를 저장하고 있을 구조체에 보낸다.

void Update ()
{
	if (Input.GetButtonDown("Jump"))
    {
    	playerCmdStack.Add(new JumpCommand());
    }
}

 

Why Command Pattern?

사용법은 얼추 알 수 있지만, 왜 사용해야 하는지는 위의 예시로 느끼기 힘들다. 위의 예시를 확장해 생각해보면, Jump하는 커맨드가 플레이어 뿐만이 아니라 다른 NPC에도 쓰일 수 있다. 그때도 같은 구조를 들고갈 수 있다. 또한 이런 여러 명령들을 저장하고 있기 때문에, Undo와 Redo를 하기에 용이하다.

'Coding > Unity, C#' 카테고리의 다른 글

Unity : Addressable Asset System  (0) 2021.03.02
Unity : Virtual, Abstract, Interface  (0) 2021.02.23
[Unity] Save, Load  (0) 2021.02.23
[Unity / Mirror] Authority  (0) 2021.02.19
Unity : Built-in Pipeline, Forward Rendering Path  (0) 2021.02.16