Strategy Pattern
View all Design Patterns
알고리즘(또는 전략)을 객체의 행동으로 캡슐화 하고, 이를 동적으로 변경할 수 있도록 하는 방법이다. 런타임 시 알고리즘을 선택할 수 있게 해준다.
Class Diagram
Code
interface Strategy {
execute(): void;
}
class ConcreteStrategyA implements Strategy {
execute(): void {
console.log("Executing ConcreteStrategyA");
}
}
class ConcreteStrategyB implements Strategy {
execute(): void {
console.log("Executing ConcreteStrategyB");
}
}
class Context {
private strategy: Strategy;
constructor(strategy: Strategy) {
this.strategy = strategy;
}
setStrategy(strategy: Strategy): void {
this.strategy = strategy;
}
execute(): void {
this.strategy.execute();
}
}
const strategyA = new ConcreteStrategyA();
const strategyB = new ConcreteStrategyB();
const context = new Context(strategyA);
context.execute();
// Executing ConcreteStrategyA
context.setStrategy(strategyB);
context.execute();
// Executing ConcreteStrategyB
Pros and Cons
Pros
- 각각의 전략에 맞는 행동을 독립적으로 관리할 수 있다.
- 재사용성이 향상된다.
- 동적으로 런타임 시 전략을 변경할 수 있다.
Cons
- 사용하는 알고리즘(또는 전략)의 개수가 적은 경우 오히려 오버헤드가 발생할 수 있다.