반응형
Strategy Pattern은 디자인 패턴 중 하나로, 알고리즘의 구현을 캡슐화하여 그것들을 상호 교체할 수 있도록 만든다. 이 패턴은 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있도록 해줍니다.
기본 구조
Strategy Pattern은 다음과 같은 세 가지 주요 구성 요소로 이루어져 있습니다:
- Strategy: 이것은 모든 알고리즘(전략)의 공통 인터페이스입니다.
- ConcreteStrategy: Strategy 인터페이스를 구현한 실제 알고리즘 클래스입니다.
- Context: Strategy 객체를 사용하는 역할을 합니다. 이는 클라이언트에 의해 설정될 수 있습니다.
언제 사용해야 하는가?
- 동일한 문제에 대해 여러 가지 해결 방법이 있는 경우
- 알고리즘이 클래스의 정의와 독립적으로 변경될 수 있어야 할 때
- 조건문 대신 여러 알고리즘을 캡슐화해야 하는 경우
As-Is 예시 (Strategy Pattern 사용 전)
public class ImageProcessor
{
public void Process(string filterType, Image image)
{
if(filterType == "B&W")
{
// Black & White 처리 로직
}
else if(filterType == "Sepia")
{
// Sepia 처리 로직
}
// ... 여러 필터 타입들 ...
}
}
To-Be 예시 (Strategy Pattern 사용 후)
// Strategy
public interface IFilter
{
void Apply(Image image);
}
// ConcreteStrategy
public class BlackAndWhiteFilter : IFilter
{
public void Apply(Image image)
{
// Black & White 처리 로직
}
}
public class SepiaFilter : IFilter
{
public void Apply(Image image)
{
// Sepia 처리 로직
}
}
// Context
public class ImageProcessor
{
private IFilter _filter;
public ImageProcessor(IFilter filter)
{
_filter = filter;
}
public void Process(Image image)
{
_filter.Apply(image);
}
}
이렇게 하면 ImageProcessor를 사용할 때 원하는 필터 전략을 주입하면 됩니다.
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 디자인패턴 - Abstract Factory Pattern (0) | 2023.08.15 |
---|---|
[C#] 디자인패턴 - Factory Method Pattern (0) | 2023.08.15 |
[C#] LINQ 쿼리 구문 연산자와 사용법 (0) | 2023.06.09 |
[C#] LINQ의 종류와 예제 (0) | 2023.06.09 |
[C#] Log4net을 이용한 Logger 구현 (0) | 2023.04.18 |