[typescript] 수행할 작업을 객체로 캡슐화하여 나중에 실행하는 커맨드 패턴과 타입스크립트의 결합 사례
커맨드 패턴은 특정 작업을 객체로 캡슐화하여 실행과 연관된 메타데이터를 제공하는 행동 패턴입니다. 이 패턴은 실행될 작업에 대한 정보를 포함하는 객체를 만들고, 나중에 실행될 때 이 객체를 호출합니다.
커맨드 패턴의 구조
커맨드 패턴의 구조는 다음과 같습니다.
- Command: 작업을 나타내는 인터페이스 또는 추상 클래스
- ConcreteCommand: Command를 구현한 구체적인 커맨드 클래스
- Invoker: Command의 호출자
- Receiver: 작업을 수행하는 객체
타입스크립트로 커맨드 패턴 구현하기
아래는 타입스크립트를 사용하여 간단한 커맨드 패턴을 구현한 예제 코드입니다.
interface Command {
execute(): void;
}
class ConcreteCommand implements Command {
private receiver: Receiver;
constructor(receiver: Receiver) {
this.receiver = receiver;
}
execute(): void {
this.receiver.performAction();
}
}
class Receiver {
performAction(): void {
console.log("작업을 수행합니다.");
}
}
class Invoker {
private command: Command;
setCommand(command: Command): void {
this.command = command;
}
executeCommand(): void {
this.command.execute();
}
}
// 사용 예제
const receiver = new Receiver();
const command = new ConcreteCommand(receiver);
const invoker = new Invoker();
invoker.setCommand(command);
invoker.executeCommand();
위 예제에서는 Command와 ConcreteCommand를 정의하고, Receiver 클래스를 사용하여 작업을 수행합니다.
타입스크립트와 커맨드 패턴의 결합 사례
타입스크립트의 강력한 타입 시스템과 인터페이스를 활용하여 커맨드 패턴을 구현하면, 코드의 유지 보수성과 가독성을 높일 수 있습니다. 또한, 커맨드 패턴을 사용하면 실행될 작업을 동적으로 변경하거나 취소할 수 있는 유연한 구조를 만들 수 있습니다.
결론
커맨드 패턴은 타입스크립트의 객체지향적인 특성과 잘 어울리며, 타입 안정성과 모듈화를 향상시킬 수 있습니다. 이 패턴을 효과적으로 활용하여 코드의 유연성과 확장성을 높일 수 있습니다.
참고문헌:
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.