커맨드 패턴 (Command Pattern)


커맨드 패턴은 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴이다.

 

Head-First Design Pattern 책을 보면 해당 패턴을 리모컨을 예로 들어 설명한다.

설명에 앞서, 커맨드 패턴에는 4개의 개념이 있다.

  1. command
    해당 패턴의 핵심은 객체의 행위(메서드)를 클래스로 만든다는 것이다. 이렇게 만들어진 클래스를 가리킴.
    일련의 행동을 특정 receiver하고 연결시킴으로써 캡슐화한다.
    예를 들어, 전등을 켠다라는 행위( 메서드 )를 클래스로 만든다고 해보자. 그럼 이 클래스에는 전등에 해당하는 객체가 있어야겠지 ?
    여기서 전등 객체receiver 객체 !
  2. receiver
    위에서 예로 든걸 이어서, 전등을 켠다라는 행위에 대한 클래스를 LightOnCommand라 하자.
    이 클래스는 전등을 켠다는 행위를 하기 위해 자신이 가진 전등 객체의 메서드를 실행시킨다.
    여기서 전등 객체가 receiver 객체이며, 구체적인 행위에 대한 로직을 담고 있는 객체이다.
  3. invoker
    하나의 command 객체는 하나의 행위다. 
    invoker 객체는 다수의 command 객체( 여러가지 행위 )를 받아, 각각의 command 객체를 어떤 식으로 컨트롤할지 정하는 객체이다. 즉, 여러가지 행위에 대해서 어떤 식으로 컨트롤해서 사용할지를 결정하는 객체이다.
  4. client
    client 객체는 위의 invoker 객체command 객체를 직접적으로 사용하는 객체이다. (그냥 말그대로 클라이언트 코드쪽)