One_KWS

커맨드 패턴(Command Pattern) 본문

디자인 패턴

커맨드 패턴(Command Pattern)

One-Kim 2023. 4. 10. 13:46

소개

커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 요청을 한 객체와 이 요청을 처리할 객체를 분리한다. 이를 통해, 요청을 수행하는 객체가 다양한 요청을 처리할 수 있으며, 실행 취소, 다시 실행과 같은 기능을 제공할 수 있다.

 

 

Invoker

Invoker는 명령 객체를 생성하고 실행될 메서드를 호출한다. 이 때, Command 인터페이스를 통해 ConcreteCommand 객체를 호출하기 때문에 실제 ConcreteCommand 객체의 타입을 알 필요가 없다.

public class Invoker {
    private Command command;

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

    public void ExecuteCommand() {
        command.Execute();
    }
}

Command

Command는 코든 커맨드 객체에서 구현해야 하는 인터페이스이다. 모든 명령은 Execute() 메소드 호출을 통해 수행되며, 이 메소드에서는 리시버에 특정 작업을 처리하는 지시를 전달한다. Invoker에서 Execute() 메소드 호출을 통해 요청을 하면 ConcreteCommand 객체에서 Receiver에 있는 메소드를 호출함으로써 그 작업을 처리합니다.

public interface Command {
    public void Execute();
}

public class ConcreteCommand : Command {
    private Receiver receiver;

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

    public void Execute() {
        receiver.Action();
    }
}

Recever

요구 사항을 수행하기 위해 어떤 일을 처리해야 하는지 알고 있는 객체이다. ConcreteCommand 객체가 호출될 때 해당 기능을 실행한다.

public class Receiver {
    public void Action() {
        Console.WriteLine("Receiver Action");
    }
}

 

Client

ConcreteCommand 객체를 생성하고, Receiver 객체를 설정하여 Invoker에게 전달한다.

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

    invoker.SetCommand(command);
    invoker.ExecuteCommand();
}