[GoF Design Pattern] 전략 패턴 (Strategy Pattern)
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 클래스를 사용하여 정렬 알고리즘을 동적으로 선택할 수 있습니다.
이를 통해 알고리즘을 교체하거나 추가하기가 쉬워지며, 코드의 확장성과 유지 보수성이 향상됩니다.