Skip to main content

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

  • 사용하는 알고리즘(또는 전략)의 개수가 적은 경우 오히려 오버헤드가 발생할 수 있다.
Related Links