컴퓨터 프로그래밍에서 여러 가지 디자인 패턴 중 한 가지인 Command Pattern은 객체지향 언어에서 많이 사용되는 패턴 중 하나입니다. 이 패턴을 사용하면 요청과 실행을 분리하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이 패턴은 Java, C#, Python 등 다양한 언어에서 사용 가능합니다. 이번 글에서는 Command Pattern에 대해 자세히 알아보겠습니다.
Command Pattern이란 무엇인가?
Command Pattern은 객체지향 디자인 패턴 중 하나로, 실행될 기능을 캡슐화하고, 이를 호출하는 객체와 수행하는 객체를 분리하여 구현합니다. 이 패턴을 사용하면 실행될 기능을 나타내는 객체(Command)와 이 객체를 사용하는 객체(Invoker)를 분리할 수 있습니다. 이렇게 함으로써, 요청하는 객체와 실행되는 객체의 결합도를 낮출 수 있습니다.
이 패턴은 다음과 같이 구성됩니다.
- Command: 실행될 기능을 나타내는 객체로, 인터페이스로 정의합니다.
- ConcreteCommand: Command 인터페이스를 구현한 클래스로, 실행될 기능을 구현합니다.
- Invoker: ConcreteCommand를 실행하는 객체입니다. 이 객체는 실행할 ConcreteCommand를 보관하고, 실행을 요청받으면 해당 ConcreteCommand를 실행합니다.
- 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: 요청과 실행을 분리하여 유연하고 확장 가능한 코드 작성하기
'개발' 카테고리의 다른 글
Iterator Pattern: 컬렉션 요소에 접근하는 방식을 일관성 있게 관리하기 (0) | 2023.04.06 |
---|---|
Interpreter Pattern: 언어나 문법을 해석하고 실행하기 위한 디자인 패턴 (0) | 2023.04.06 |
Chain of Responsibility Pattern: 객체 간의 연쇄적인 처리를 위한 디자인 패턴 (0) | 2023.04.06 |
Adapter Pattern: 호환성 없는 객체들 간의 인터페이스 차이를 극복하기 위한 디자인 패턴 (0) | 2023.04.06 |
Flyweight Pattern: 객체 생성의 비용이 크고 많은 수의 객체 생성이 필요한 경우에 메모리 사용량을 줄이기 위한 디자인 패턴 (0) | 2023.04.06 |