컴퓨터 프로그래밍에서 여러 가지 디자인 패턴 중 한 가지인 Command Pattern은 객체지향 언어에서 많이 사용되는 패턴 중 하나입니다. 이 패턴을 사용하면 요청과 실행을 분리하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이 패턴은 Java, C#, Python 등 다양한 언어에서 사용 가능합니다. 이번 글에서는 Command Pattern에 대해 자세히 알아보겠습니다.

Command Pattern이란 무엇인가?

Command Pattern은 객체지향 디자인 패턴 중 하나로, 실행될 기능을 캡슐화하고, 이를 호출하는 객체와 수행하는 객체를 분리하여 구현합니다. 이 패턴을 사용하면 실행될 기능을 나타내는 객체(Command)와 이 객체를 사용하는 객체(Invoker)를 분리할 수 있습니다. 이렇게 함으로써, 요청하는 객체와 실행되는 객체의 결합도를 낮출 수 있습니다.

이 패턴은 다음과 같이 구성됩니다.

  1. Command: 실행될 기능을 나타내는 객체로, 인터페이스로 정의합니다.
  2. ConcreteCommand: Command 인터페이스를 구현한 클래스로, 실행될 기능을 구현합니다.
  3. Invoker: ConcreteCommand를 실행하는 객체입니다. 이 객체는 실행할 ConcreteCommand를 보관하고, 실행을 요청받으면 해당 ConcreteCommand를 실행합니다.
  4. Receiver: ConcreteCommand가 실제로 수행하는 객체입니다.

어떻게 Command Pattern을 사용하여 유연하고 확장 가능한 코드를 구현할 수 있는가?

Command Pattern을 사용하면 요청과 실행을 분리하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 예를 들어, 사용자가 요청한 기능을 취소하거나 다시 실행할 때는, 기존의 ConcreteCommand 객체를 저장하고 있는 Invoker 객체를 수정할 필요 없이, 새로운 ConcreteCommand 객체를 생성하여 실행할 수 있습니다.

Java 코드로 예를 들어보겠습니다. 다음은 Command 인터페이스와 그를 구현한 ConcreteCommand 클래스입니다.

public interface Command {
    void execute();
}

public class ConcreteCommand implements Command {
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    public void execute() {
        receiver.action();
    }
}

다음은 Invoker 클래스입니다.

public class Invoker {
    private Command command;

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

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

마지막으로, Receiver 클래스입니다.

public class Receiver {
    public void action() {
        System.out.println("Receiver action 실행");
    }
}

이제 이를 사용하는 예제를 만들어보겠습니다.

public class Main {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker();

        invoker.setCommand(command);
        invoker.executeCommand();
    }
}

위 예제에서는 Receiver 객체를 만들고, 이를 사용하여 ConcreteCommand 객체를 생성합니다. 그리고 Invoker 객체를 생성하고, 이 객체에 생성한 ConcreteCommand 객체를 설정합니다. 마지막으로, Invoker 객체를 실행합니다.

이렇게 Command Pattern을 사용하면, 요청과 실행을 분리하고 유연하고 확장 가능한 코드를 작성할 수 있습니다.

이번 글에서는 Command Pattern에 대해 알아보았습니다. 이 패턴은 객체지향 디자인 패턴 중 하나로, 요청과 실행을 분리하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. Java 코드를 예제로 들어보았는데, 이를 참고하여 실제 프로그래밍에서 Command Pattern을 사용해보세요.

Reference : Command Pattern: 요청과 실행을 분리하여 유연하고 확장 가능한 코드 작성하기

+ Recent posts