[java] 스트래티지 패턴
소프트웨어 개발에서 스트래티지 패턴은 특정한 작업을 수행하는 방법을 표현하는 디자인 패턴이다. 이 패턴은 알고리즘을 캡슐화하고 서로 교체가 가능한 형태로 만들어 코드 유연성을 높이는 데 도움을 준다.
스트래티지 패턴의 구성 요소
스트래티지 패턴은 다음과 같은 구성 요소로 이뤄진다.
- 스트래티지(Strategy) 인터페이스: 여러 알고리즘을 표현하기 위한 일반적인 인터페이스를 정의한다.
- 컨텍스트(Context): 스트래티지 객체를 참조하고 클라이언트가 사용하는 인터페이스를 정의한다.
- 콘크리트 스트래티지(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
클래스는 사용할 정렬 알고리즘을 동적으로 설정할 수 있다. 클라이언트 코드에서는 다양한 종류의 정렬 알고리즘을 사용하는 것이 매우 쉽다.
스트래티지 패턴은 객체지향 소프트웨어 디자인에서 많이 활용되며, 코드의 재사용성을 높이고 유지보수성을 향상시키는 데 도움을 준다.
더 많은 정보를 원하신다면 스트래티지 패턴 - 위키백과를 참고하세요.