본문 바로가기

Knowledge/Design Pattern

커맨드 패턴 (Command Pattern)


커맨드 패턴 (Command Pattern)


요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 다른 요구사항을 집어넣을 수도 있다.

또한 요청내역을 큐에 저장하거나 로그를 기록할 수도 있고 작업 취소 기능도 지원 가능하게 한다.


》》 작업 요청을 객체의 형태로 캡슐화 하는 것이 가장 큰 목적이다.

》》 즉, 커맨드 패턴을 사용하면 작업을 요청한 곳과 그 작업을 처리한 곳을 분리시킬 수 있다.




※ 커맨드패턴의 구조


클라이언트 : 커맨드 객체를 생성하고 인보커를 통해 리시버에 전달하여 요청한다.

인보커 : 클라이언트의 커맨드 객체를 리시버에 전달한다.

리시버 : 요청대로 특정 행동을 수행한다.

커맨드 : 어떠한 특정 행동을 담고 있는 추상 객체이다.


이를 식당에 비유하여 쉽게 설명하자면....


클라이언트 --> 고객 : 고객이 웨이터에게 주문한다.

커맨드객체 --> 주문서 : 주문 내용은 주문서를 통해 전달된다.

인보커 --> 웨이터 : 웨이터는 주문서를 카운터에 전달한다.

리시버 --> 주방장 : 주방장이 주문서대로 음식을 준비한다.




Command 객체는 Action 을 수행하는 Receiver 를 캡슐화 한다.

Command 객체의 execute() Receiver Action 을 호출한다.

매크로 커맨드(Macro Command) 는 여러 개의 Command 를 한꺼번에 호출할 수 있게 해주는 간단한 방법이다.


커맨드 패턴은 작업 
취소(Undo) 기능을 지원하고  로그나 트랜잭션 시스템 구현에도 활용된다.

Macro Command 에서도 어렵지 않게 Undo() 기능을 지원할 수 있다.