[java] 스트래티지 패턴

소프트웨어 개발에서 스트래티지 패턴은 특정한 작업을 수행하는 방법을 표현하는 디자인 패턴이다. 이 패턴은 알고리즘을 캡슐화하고 서로 교체가 가능한 형태로 만들어 코드 유연성을 높이는 데 도움을 준다.

스트래티지 패턴의 구성 요소

스트래티지 패턴은 다음과 같은 구성 요소로 이뤄진다.

  1. 스트래티지(Strategy) 인터페이스: 여러 알고리즘을 표현하기 위한 일반적인 인터페이스를 정의한다.
  2. 컨텍스트(Context): 스트래티지 객체를 참조하고 클라이언트가 사용하는 인터페이스를 정의한다.
  3. 콘크리트 스트래티지(Concrete Strategy): 스트래티지를 구현한 클래스로, 실제 알고리즘을 제공한다.

스트래티지 패턴의 예시

아래는 스트래티지 패턴을 사용하여 정렬 알고리즘을 다이내믹하게 선택하는 예시이다.

// 스트래티지 인터페이스
interface SortStrategy {
    void sort(int[] dataset);
}

// 퀵 소트 알고리즘
class QuickSort implements SortStrategy {
    public void sort(int[] dataset) {
        System.out.println("QuickSort 알고리즘을 이용한 정렬");
    }
}

// 버블 소트 알고리즘
class BubbleSort implements SortStrategy {
    public void sort(int[] dataset) {
        System.out.println("BubbleSort 알고리즘을 이용한 정렬");
    }
}

// 정렬 컨텍스트
class SortContext {
    private final SortStrategy sortStrategy;

    public SortContext(SortStrategy sortStrategy) {
        this.sortStrategy = sortStrategy;
    }

    public void sort(int[] dataset) {
        sortStrategy.sort(dataset);
    }
}

// 클라이언트 코드
class Client {
    public static void main(String[] args) {
        int[] dataset = {1, 5, 4, 3, 2};
        
        SortContext context = new SortContext(new QuickSort());
        context.sort(dataset);  // QuickSort 알고리즘을 이용한 정렬

        context = new SortContext(new BubbleSort());
        context.sort(dataset);  // BubbleSort 알고리즘을 이용한 정렬
    }
}

위의 예시에서, SortContext 클래스는 사용할 정렬 알고리즘을 동적으로 설정할 수 있다. 클라이언트 코드에서는 다양한 종류의 정렬 알고리즘을 사용하는 것이 매우 쉽다.

스트래티지 패턴은 객체지향 소프트웨어 디자인에서 많이 활용되며, 코드의 재사용성을 높이고 유지보수성을 향상시키는 데 도움을 준다.

더 많은 정보를 원하신다면 스트래티지 패턴 - 위키백과를 참고하세요.