프로그래밍/C#

[C#] 디자인패턴 - Strategy Pattern

흔한티벳여우 2023. 8. 15. 12:02
반응형

Strategy Pattern은 디자인 패턴 중 하나로, 알고리즘의 구현을 캡슐화하여 그것들을 상호 교체할 수 있도록 만든다. 이 패턴은 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있도록 해줍니다.

기본 구조

Strategy Pattern은 다음과 같은 세 가지 주요 구성 요소로 이루어져 있습니다:

  1. Strategy: 이것은 모든 알고리즘(전략)의 공통 인터페이스입니다.
  2. ConcreteStrategy: Strategy 인터페이스를 구현한 실제 알고리즘 클래스입니다.
  3. Context: Strategy 객체를 사용하는 역할을 합니다. 이는 클라이언트에 의해 설정될 수 있습니다.

언제 사용해야 하는가?

  1. 동일한 문제에 대해 여러 가지 해결 방법이 있는 경우
  2. 알고리즘이 클래스의 정의와 독립적으로 변경될 수 있어야 할 때
  3. 조건문 대신 여러 알고리즘을 캡슐화해야 하는 경우

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를 사용할 때 원하는 필터 전략을 주입하면 됩니다.

 

반응형