본문 바로가기
개발공부 일지/면접

전략 패턴(Strategy Pattern)

by Box Cat 2023. 10. 3.
728x90
반응형

전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다.

여기서 '전략'이란 일종의 알고리즘이 될 수 도 있으며, 기능이나 동작이 될 수도 있는 특정한 목표를 수행하기 위한 행동 계획을 말한다.

즉, 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다.

  • Strategy 패턴은 어떤 기능에 대한 특정 알고리즘을 느슨하게 결합시켜주는 패턴입니다.
  • 어떤 알고리즘이 느슨하게 결합되면 추후 더 나은 알고리즘으로 쉽게 변경할 수 있을 뿐만 아니라 프로그램이 실행 중에 상황에 맞는 알고리즘으로 쉽게 변경할 수 있습니다.
  • 또한 기존의 알고리즘을 유지하면서 새로운 알고리즘을 효과적으로 추가할 수 있습니다.
interface FilterStrategy {
    apply(image: string): void;
  }
 
  class GreyScaleStrategy implements FilterStrategy {
    public apply(image: string): void {
      console.log(`Applying greyscale filter to ${image}`);
    }
  }
 
  class SepiaStrategy implements FilterStrategy {
    public apply(image: string): void {
      console.log(`Applying sepia filter to ${image}`);
    }
  }
 
  class NegativeStrategy implements FilterStrategy {
    public apply(image: string): void {
      console.log(`Applying negative filter to ${image}`);
    }
  }
 
  class ImageProcessor {
    constructor(private strategy: FilterStrategy) {}
 
    public setFilterStrategy(strategy: FilterStrategy): void {
      this.strategy = strategy;
    }
 
    public applyFilter(image: string): void {
      this.strategy.apply(image);
    }
  }
 
  // Client Code
  const imageProcessor = new ImageProcessor(new GreyScaleStrategy());
  imageProcessor.applyFilter("Image.jpg");
 
  imageProcessor.setFilterStrategy(new SepiaStrategy());
  imageProcessor.applyFilter("Image2.jpg");
 
 
728x90
반응형

댓글