커맨드 패턴을 이용하면 작업을 요청하는 쪽과 작업을 처리하는 쪽을분리할 수 있다.
특정 객체에 관한 특정 작업 요청을 캡슐화해주는 커맨드 객체(commad object)를 이용
커맨드 패턴을 사용하면 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있다.
이러면 요청을 큐에 저장하거나 로그로 기억하거나 작업 취소 기능을 사용할 수 있다.
클래스 다이어그램에 있는 각 클래스들이 어떤 관계인지 구상해보자.

✅ Client : ConcreteCommand를 생성하고 Receiver를 설정한다.
✅ Invoker : 인보커에는 명령이 있으며, Execute() 메소드를 호출함으로써 커맨드 객체에게 특정 작업을 수행해 달라고 요구를 한다.
✅ Receiver : 리시버는 요구 사항을 수행할 때 어떤 일을 처리해야 하는지 알고 있는 객체이다.
✅ Command : 모든 커맨드 객체에서 구현해야 하는 인터페이스이다.
✅ ConcreteCommand : 특정 행동과 리시버를 연결시켜준다. 인보커에서 Execute() 호출로 요청하면 ConcreteCommand 객체에서 리시버에 이쓴ㄴ 메소드를 호출해서 그 작업을 처리해준다.
커맨드를 확장시켜 여러 개의 커맨드를 한 번에 호출할 수 있게 해 주는 가장 간편한 방법이다.
매크로 커맨드를 활용해 작업 취소 기능을 구현할 수 있다.
HeadFirst DesignPattern - 한빛미디어