[java] 명령 패턴

소프트웨어 디자인 패턴 중 하나인 명령 패턴은 실행될 기능을 캡슐화하고 호출자와 수신자 사이의 의존성을 제거하는 패턴입니다. 이는 실행될 기능을 나타내는 객체와 이를 호출하는 객체 사이의 관계를 강화시킵니다.

명령 패턴 구조

명령 패턴은 일반적으로 다음과 같은 구성 요소로 이루어집니다.

  1. Command (명령): 실행될 기능에 대한 인터페이스를 정의합니다.
  2. ConcreteCommand (구체적 명령): 실제로 기능을 수행하는 클래스로 Command 인터페이스를 구현합니다.
  3. Invoker (호출자): 명령을 실행하는 객체입니다.
  4. Receiver (수신자): 명령을 수행하는 객체로, 실제 동작이 실행됩니다.
  5. Client (클라이언트): 명령을 생성하고 설정하여 호출자에게 전달합니다.

명령 패턴 예제

다음은 Java로 구현된 간단한 명령 패턴 예제입니다.

Command Interface

public interface Command {
    void execute();
}

ConcreteCommand Class

public class LightOnCommand implements Command {
    private Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    public void execute() {
        light.turnOn();
    }
}

Invoker Class

public class RemoteControl {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void pressButton() {
        command.execute();
    }
}

Receiver Class

public class Light {
    public void turnOn() {
        System.out.println("Light is turned on");
    }
}

Client Code

public class Client {
    public static void main(String[] args) {
        Light light = new Light();
        LightOnCommand lightOn = new LightOnCommand(light);
        RemoteControl remote = new RemoteControl();

        remote.setCommand(lightOn);
        remote.pressButton();
    }
}

이 예제에서는 전구를 켜는 기능을 명령 객체로 캡슐화하고, 호출자 객체를 통해 실행합니다.

명령 패턴은 각 명령을 클래스로 캡슐화하여 다양한 명령을 수행할 수 있고, 호출자 객체는 명령을 수행하는 수신자 객체와의 의존성을 갖지 않고도 실행할 수 있습니다.

결론

명령 패턴은 유연성과 확장성을 제공하며, 객체 간의 강한 의존성을 줄여주는 디자인 패턴입니다.

참고 자료