-
[GoF Design Pattern] 전략 패턴 (Strategy Pattern)Design Pattern 2023. 9. 22. 00:46반응형
GoF Design Pattern에 대한 설명은 아래 포스트를 참고해주세요.
https://developer-been.tistory.com/41
전략 패턴 (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 클래스를 사용하여 정렬 알고리즘을 동적으로 선택할 수 있습니다.
이를 통해 알고리즘을 교체하거나 추가하기가 쉬워지며, 코드의 확장성과 유지 보수성이 향상됩니다.
반응형'Design Pattern' 카테고리의 다른 글
[GoF Design Pattern] 디자인 패턴 (0) 2023.09.22