본문 바로가기

💻 개발IT/Design Patterns

3. Behavior 패턴 - Command Pattern

Command Pattern

특정 Command를 Object화하여 객체를 필요에 따라 처리하는 패턴

 

목적

  • request를 Object로 캡슐화
  • queuing 및 콜백 같은 기존 Object 기반 관계에서 request 처리

 

사용하는 경우

  • request는 다양한 시간대, 순서로 실행될 경우
  • request의 history가 필요한 경우
  • 호출하는 Object와 호출 받는 Object를 분리해야할 경우

 

Command Pattern을 사용하지 않을 경우

아래 처럼 버튼의 행동을 수정하기 위해 Client code를 수정해야하는 문제점 존재

 

Class 다이어그램

  • Client : command object를 생성
  • Invoker : Client 요청을 받아 Receiver의 액션을 호출
  • Receiver : ConcreteCommand에서 execute()를 구현할 때 필요한 클래스. ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스. Client가 요청한 내용에 대해 액션만 취해주면 됨
  • Command : 실행될 Command에 대한 인터페이스.
  • ConcreteCommand : 실행되는 Command을 구현하는 클래스. Receiver가 무엇을 처리해야하는지 정의

 

Sequence 다이어그램

 

 

예시 1 - 간단한 Command Pattern

불을 켰다 끌 수 있는 리모컨 시스템을 만들어보자

 

Command interface 생성

ConcreteCommand 생성

Invoker 생성

Client 코드 작성

 

예시 2 - 예시 1의 확장 버전

Invoker 내 Null Object 추가하여 Command 초기화

Invoker 내 함수 수정

Client code 수정

 

예시 3 - Undo command 추가

 

예시 4 - Command Pattern + Iterator Pattern

반응형