커맨드 패턴이란?

작업을 요청하는 객체와 실제 작업을 수행하는 객체를 분리하는 패턴이다.

조금 더 쉽게 말하면,

어떤 작업을 직접 실행하는 대신, 실행할 작업 자체를 하나의 객체(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와 각 메서드의 호출 방법을 직접 알고 있도록 만들어야 한다.