Strategy 패턴은 알고리즘을 캡슐화하여, 클라이언트가 알고리즘을 선택할 수 있도록 하는 디자인 패턴입니다. 이 패턴은 알고리즘의 변화를 클라이언트 코드에 영향을 주지 않고 독립적으로 변경할 수 있게 합니다. 주로 행동(Behavioral) 패턴에 속하며, 런타임 시에 알고리즘을 교체할 수 있는 유연성을 제공합니다.
Strategy 패턴은 알고리즘을 정의하고 이를 캡슐화하여 서로 교환 가능하게 만드는 패턴입니다. 즉, 특정 알고리즘을 사용하는 클래스를 변경하지 않고도 알고리즘을 쉽게 변경할 수 있도록 합니다.
// 전략 인터페이스
interface SortingStrategy {
void sort(int[] array);
}
// 구체적인 전략 클래스 1
class BubbleSort implements SortingStrategy {
public void sort(int[] array) {
System.out.println("Sorting using Bubble Sort");
// Bubble sort 알고리즘 구현
}
}
// 구체적인 전략 클래스 2
class QuickSort implements SortingStrategy {
public void sort(int[] array) {
System.out.println("Sorting using Quick Sort");
// Quick sort 알고리즘 구현
}
}
// 컨텍스트 클래스
class Sorter {
private SortingStrategy strategy;
public Sorter(SortingStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(SortingStrategy strategy) {
this.strategy = strategy;
}
public void sortArray(int[] array) {
strategy.sort(array);
}
}
// 사용 예
public class StrategyPatternExample {
public static void main(String[] args) {
int[] array = {5, 2, 9, 1, 5, 6};
Sorter sorter = new Sorter(new BubbleSort());
sorter.sortArray(array);
sorter.setStrategy(new QuickSort());
sorter.sortArray(array);
}
}
/*
Sorting using Bubble Sort
Sorting using Quick Sort
*/