728x90
반응형
커맨드 패턴이란
커맨드패턴은 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴이다.
- 하나의 명령(기능)을 객체화한 패턴
- 객체는 전달할 수 있고 보관할 수 있음, 즉 명령(기능)을 전달하고 보관할 수 있게 됨.
- 배치 실행, Undo/Redo, 우선 순위가 높은 명령을 먼저 실행하기 등이 가능해 짐
- 행위(Behavioral) 패턴 중 하나.
커맨드 패턴에서는 크게 Invoker, Receiver, Command(이하 커맨드, 명령) 객체로 구분됩니다. Invoker는 기능의 실행을 요청하고 Receiver는 명령을 수행하는 객체입니다.
namespace CommandPattern {
export class Command {
public execute(): void {
throw new Error("Abstract method!");
}
}
export class ConcreteCommand1 extends Command {
private receiver: Receiver;
constructor(receiver: Receiver) {
super();
this.receiver = receiver;
}
public execute(): void {
console.log("`execute` method of ConcreteCommand1 is being called!");
this.receiver.action();
}
}
export class ConcreteCommand2 extends Command {
private receiver: Receiver;
constructor(receiver: Receiver) {
super();
this.receiver = receiver;
}
public execute(): void {
console.log("`execute` method of ConcreteCommand2 is being called!");
this.receiver.action();
}
}
export class Invoker {//기능 실행을 요청
private commands: Command[];
constructor() {
this.commands = [];
}
public storeAndExecute(cmd: Command) {
this.commands.push(cmd);
cmd.execute();
}
}
export class Receiver {//명령을 수행
public action(): void {
console.log("action is being called!");
}
}
}
(function main() { // 즉시 실행 함수 표현(IIFE - Immediately Invoked Function Expression)
var receiver: CommandPattern.Receiver = new CommandPattern.Receiver(),
command1: CommandPattern.Command = new CommandPattern.ConcreteCommand1(receiver),
command2: CommandPattern.Command = new CommandPattern.ConcreteCommand2(receiver),
invoker : CommandPattern.Invoker = new CommandPattern.Invoker();
invoker.storeAndExecute(command1);
invoker.storeAndExecute(command2);
}());
커맨드 패턴의 장단점
장점
- 인보커와 리시버, 커맨드가 각각 캡슐화 되어서 결합도가 낮아진다.
단점
- 리시버 객체의 동작이 늘어날 때 마다 커맨드 클래스가 늘어나기 때문에 클래스가 많아진다.
커맨드 패턴과 전략 패턴의 차이점
-전략 패턴은 먼저 어떻게 라는 측면에 집중힌다. 하고자 하는 것은 이미 정해져 있고, 방법을 어떻게 할지에 대한 유연성을 고려하며 구현한다. 반면에, 커맨드 패턴은 무엇을 초점을 두게 된다. 어떻게 할지에 대한 방법은 외부에서 정의하며 주입을 해주며, 그것을 실행하는 것이 중요하기 때문이다.
-Command를 사용하여 모든 작업을 개체로 변환할 수 있다. 작업의 매개 변수는 해당 개체의 필드가 된다. 변환을 통해 작업 실행을 연기하고, 대기열에 넣고, 명령 기록을 저장하고, 원격 서비스에 명령을 보내는 등의 작업을 수행할 수 있다. 반면에 Strategy은 일반적으로 동일한 작업을 실행하는 것을 다른 방법으로 설명하므로 단일 컨텍스트 클래스 내에서 이러한 알고리즘을 교환하는 것이다.
728x90
반응형
'개발공부 일지 > 면접' 카테고리의 다른 글
Observer(옵저버) 패턴 (0) | 2023.10.09 |
---|---|
Template Method(템플릿 메서드) 패턴 (0) | 2023.10.09 |
Iterator(이터레이터) 디자인 패턴 (0) | 2023.10.08 |
MVC vs MVP vs MVVM (0) | 2023.10.04 |
전략 패턴(Strategy Pattern) (0) | 2023.10.03 |
댓글