작업을 요청하는 객체와 실제 작업을 수행하는 객체를 분리하는 패턴이다.
조금 더 쉽게 말하면,
어떤 작업을 직접 실행하는 대신, 실행할 작업 자체를 하나의 객체(Command)로 만들어 전달하는 방식이다.
주문과 관련된 기능을 처리하는 클래스
class OrderManager {
constructor() {
this.orders = [];
}
placeOrder(order, id) {
this.orders.push(id);
return `${order} 주문이 완료되었습니다. (주문번호: ${id})`;
}
}
const orderManager = new OrderManager();
orderManager.placeOrder("피자", 1);
위처럼 단순히 주문 메서드를 한 번 호출하는 정도라면 Command Pattern을 사용할 이유가 크지 않다.
예약 주문에서는 지금 요청을 받더라도 실제 주문은 지정된 시간에 실행되어야 한다.
기존의 방식으로 구현한다면 예약 시스템이 OrderManager와 각 메서드의 호출 방법을 직접 알고 있도록 만들어야 한다.