커맨드 패턴

감사콩·2026년 1월 12일

유니티

목록 보기
27/29

서론


저번에도 배웠던 커맨드 패턴에 대해 알아보자
오늘 TIL은 나눠서 작성 예정



TIL 요약(커맨드패턴 장점)

  1. 행동의 객체화: 행동을 Command 객체로 감싸서 관리.
  2. 의존성 분리: Invoker(지시자) <-> Receiver(실무자) 간 의존성 분리.
  3. 확장성: Undo, Redo 등의 확장이 용이.

커맨드 패턴


명령을 객체로 캡슐화하는 디자인 패턴
이전부터 종종 사용했지만 한 번 더 알아보고 가자.


1. Invoker (발동자 / 호출자)


명령 객체를 보유하고 있다가, 특정 시점에 실행(Execute)하는 객체.
명령을 언제 실행할지, 실행 내역을 저장할지(Undo/Redo), 대기열에 넣을지 결정.

예시: 키 입력 감지(핸들러 등), 클릭 감지, 턴 관리

2. Receiver (수신자 / 실제 수행 객체)


실제 로직(알고리즘)을 가지고 있는 객체.
기능이 실제로 어떻게 동작하는지 구체적인 코드로 구현.

예시:PlayerController


3. Command(명령 객체)


Receiver의 특정 메서드 호출을 캡슐화한 객체.
Invoker와 Receiver 사이의 중계 역할.

예시: JumpCommand (내부에서 player.Jump() 호출)


+ Recorder


Invoker가 실행한 명령 객체들을 저장하고 관리하는 객체.
(표준 GoF 패턴에는 없지만, 실제 구현 시 Undo/Redo 등의 구현을 위해 필요한 요소)

역할: 실행된 Command를 스택, 리스트 등에 저장.

예시

  • Undo: 스택에서 가장 최근 명령을 꺼내 Undo() 호출.
  • Replay: 저장된 명령 리스트를 처음부터 다시 순차적으로 실행.



플로우 정리


만약 사용자가 버튼을 누르면 점프하는 메서드가 존재한다면?
아래와 같은 흐름으로 동작.

  1. Input: 지정된 점프 키 입력
  2. Invoker: 키에 매핑된 JumpCommand 를 생성하고 Execute() 요청
    2-1. Recorder 가 있으면 해당 명령을 저장
  3. Command: 내부적으로 연결된 Receiver를 찾아 메서드 호출
  4. Receiver: 실제로 플레이어 캐릭터가 점프 동작을 수행



마무리


커맨드 패턴의 로직 고도화에는
커맨드의 오브젝트 풀링 등이 존재한다.
이번 기회에 프로젝트에서 활용처가 있는 지 확인해보고
그에 맞게 활용해보자.

어드레서블은 내일 작성 마무리하고 업로드.

profile
안녕하시와요

0개의 댓글