카샤의 만개시기

Command Pattern 본문

Foundation/Design Pattern

Command Pattern

SKaSha 2019. 11. 2. 08:10

Command 패턴은 명령(command)를 객체화하여 특정 객체에 명령을 내리는 패턴이다.
Command 패턴은 Invoker(발동자), Command(명령), Receiver(수신자)로 구성된다.

  • Invoker(발동자): 커멘드을 가지고 있으며 수신자에게 커멘드를 요청한다
  • Command(명령): 특정 작업
  • Receiver(수신자): 발동자로부터 수신한 커멘드를 수행한다.

예제

스위치로 전등을 껏다 키는 예제를 살펴보자.
스위치는 Invoker가 되고, Light는 Receiver가 된다.
마지막으로 On/Off 명령은 Command가 된다.

public interface Command {
    void execute();
}
// Command (명령)
public class LightOffCommand implements Command {
    Light m_light;

    public LightOffCommand(Light light) {
        m_light = light;
    }

    public void execute() {
        m_light.TurnOff();
    }
}
// Command (명령)
public class LightOnCommand implements Command {
    Light m_light;

    public LightOnCommand(Light light) {
        m_light = light;
    }

    @Override
    public void execute() {
        m_light.TurnOn();
    }
}
// Receiver (수신자)
public class Light {
    public void TurnOn() {
        System.out.println("불이 켜졌습니다");
    }

    public void TurnOff() {
        System.out.println("불이 꺼졌습니다");
    }
}
// Invoker (발동자)
public class LightSwitch {
    Command onCommand;
    Command offCommand;

    public LightSwitch(Light light) {
        onCommand = new LightOnCommand(light);
        offCommand = new LightOffCommand(light);
    }

    public void On() {
        onCommand.execute();
    }

    public void Off() {
        offCommand.execute();
    }
}

장점

커멘드가 객체화된다는 것이 큰 장점이다.
이는 캡슐화가 보장되고, 의존성이 분리되 관리가 편해진다는 것을 의미한다.
또한 재사용성 역시 좋아진다.

단점

커멘드가 늘어날때마다 관리해야 하는 객체가 늘어나고, 그로인해 복잡도가 높아질수 있다.

'Foundation > Design Pattern' 카테고리의 다른 글

Adapter 패턴과 Decorator 패턴의 차이  (0) 2019.10.27
Decorator 패턴  (0) 2019.10.27
Adapter 패턴  (0) 2019.10.27
Facade Pattern  (0) 2019.10.19
Comments