# 명령패턴이란 ?
요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 원하는 시점에 이용할 수 있도록, 매서드 이름, 매개변수 등의 요청에 사용되는 정보를 로깅, 취소 할 수 있는 패턴이다.
GoF (Gang of Four)의 디자인 패턴 책에서는 "요청 자체를 캡슐화 하는 것입니다. 이를 통해 요청이 서로 다른 사용자(Client)를 매개변수로 만들고, 요청을 대기시키거나 로깅(Logging)하여 되돌릴 수 있는 연산을 지원합니다."라고 정의하였다.
명령 패턴에는 명령(Command), 수신자(Receiver), 발동자(Invoke), 클라이언트(Client)의 4가지의 용어가 따른다.
# 명령 패턴의 UML
위의 이미지는 GoF의 디자인 패턴 책에서 제공하는 UML이다.
- Command
요청을 실행하기 위한 Interface를 선언한다.
- ConcreteCommand
receiver object와 action간의 바인딩을 정의한다.
receiver에서 대응하는 동작을 Invoking하여 실행시키는 것을 구현한다.
- Client
Command에 요청을 수행하도록 요청한다.
- Receiver
받은 요청을 어떻게 수행할지에 대한 세부 동작을 가지고 있다.
# 명령 패턴의 시퀀스 다이어그램
위의 이미지는 GoF의 디자인 패턴 책에서 제공하는 Sequence Diagram이다.
# 캐릭터 조작에 사용한 UML
위는 실제 구현에 있어서 응용한 명령 패턴의 UML이다.
# 코드 - Command.cs
요청을 받을시 그 요청을 실행하기 위한 명령을 만드는 가상클래스이다.
# 코드 - DefineCommand.cs
요청을 받을시 그 요청을 대상에게 요청하여 실행한다.
# 코드 - Invoke.cs
이 곳에서 요청이 발생하고, 그 요청에 대응하는 명령을 호출한다.
# 코드 - Actor.cs
요청에 대한 동작을 지니고 있는 부모 객체다.
# 코드 - Player.cs
실질적으로 요청이 있을시, 그 요청을 수행할 때, 그 요청이 적용되는 객체다.
# other - Time.time 이란?
이러한 구조를 가지고 있다.
즉, Time.time은 게임에서 돌아가고 있는 '게임 내의 System 시계'다 라고 생각하면 편하다.
(현재 시점 N에서 계속 시간이 흐르면, 어느 순간 (N + t)라는 시간에 도달하게 된다. 그 순간 시전이 완료되면서 공격이 나가게 된다.)
# 글을 마치면서...
동작에 대한 정보는 첨부파일에 담겨있다.
해당 명령 패턴에 의해 조작되는 캐릭터를 보고 싶다면, 첨부파일을 받아서 실행시켜보자.
# 참고 자료
1. GoF의 책 - 'Design Patterns'
2. 로버트 나이스트롬의 책 - 'Game Programming Patterns'
3. 위키백과의 '커맨드패턴' - https://goo.gl/UUkBab
'- Unity > 캐릭터 조작' 카테고리의 다른 글
State Pattern (상태 패턴) (0) | 2018.08.31 |
---|