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
반응형
'개발공부 일지 > 면접' 카테고리의 다른 글
Iterator(이터레이터) 디자인 패턴 (0) | 2023.10.08 |
---|---|
MVC vs MVP vs MVVM (0) | 2023.10.04 |
자바스크립트)Throttling(쓰로틀링) vs Debounce(디바운스) (0) | 2023.10.03 |
파사드 패턴(Facade Pattern) (0) | 2023.10.03 |
팩토리 패턴(Factory Pattern) (0) | 2023.10.03 |
댓글