Design Pattern

[GoF Design Pattern] 전략 패턴 (Strategy Pattern)

BigBeen 2023. 9. 22. 00:46
반응형

 

GoF Design Pattern에 대한 설명은 아래 포스트를 참고해주세요.

 

 

https://developer-been.tistory.com/41

 

[GoF Design Pattern] 디자인 패턴

디자인 패턴 디자인 패턴은 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식을 말합니다. 디자인 패턴을 통해 설계 문제, 해결 방법

developer-been.tistory.com

 

 

전략 패턴 (Strategy Design Pattern)

전략 패턴(Strategy Pattern)은 객체 지향 디자인 패턴 중 하나로, 알고리즘을 정의하고 해당 알고리즘을 캡슐화하여 교체 가능하게 만드는 패턴입니다. 이를 통해 동일한 작업을 수행하는 여러 알고리즘을 선택적으로 사용할 수 있게 됩니다. 아래는 전략 패턴을 설명하기 위한 간단한 예시입니다.

 

 

예시: 정렬 알고리즘 선택하기

전략 패턴을 사용하여 여러 정렬 알고리즘을 선택하는 간단한 예를 살펴보겠습니다.

 

1. 전략(Strategy) 인터페이스 정의:

public interface SortingStrategy {
    void sort(int[] data);
}

 

2. 전략을 구체화한 클래스들 생성:

public class BubbleSort implements SortingStrategy {
    @Override
    public void sort(int[] data) {
        // 버블 정렬 알고리즘 구현
    }
}

public class QuickSort implements SortingStrategy {
    @Override
    public void sort(int[] data) {
        // 퀵 정렬 알고리즘 구현
    }
}

public class MergeSort implements SortingStrategy {
    @Override
    public void sort(int[] data) {
        // 합병 정렬 알고리즘 구현
    }
}

 

3. 전략을 사용하는 클래스(컨텍스트) 정의:

public class Sorter {
    private SortingStrategy sortingStrategy;

    public void setSortingStrategy(SortingStrategy sortingStrategy) {
        this.sortingStrategy = sortingStrategy;
    }

    public void sortData(int[] data) {
        sortingStrategy.sort(data);
    }
}

 

4. 사용 예제:

public class Main {
    public static void main(String[] args) {
        int[] data = {5, 2, 8, 1, 9};

        Sorter sorter = new Sorter();

        // 버블 정렬 선택
        sorter.setSortingStrategy(new BubbleSort());
        sorter.sortData(data);

        // 퀵 정렬 선택
        sorter.setSortingStrategy(new QuickSort());
        sorter.sortData(data);

        // 합병 정렬 선택
        sorter.setSortingStrategy(new MergeSort());
        sorter.sortData(data);
    }
}

 

✍️ 마무리

이 예제에서는 정렬 알고리즘을 선택하기 위해 전략 패턴을 사용했습니다. 

SortingStrategy 인터페이스를 정의하고, 각 정렬 알고리즘을 해당 인터페이스를 구현하는 클래스로 만들었습니다. 

그런 다음 Sorter 클래스를 사용하여 정렬 알고리즘을 동적으로 선택할 수 있습니다. 

이를 통해 알고리즘을 교체하거나 추가하기가 쉬워지며, 코드의 확장성과 유지 보수성이 향상됩니다.

반응형