Design Pattern - Strategy

JunMyung Lee·2024년 7월 29일
0

디자인패턴

목록 보기
2/3

설명

Strategy 패턴은 알고리즘을 캡슐화하여, 클라이언트가 알고리즘을 선택할 수 있도록 하는 디자인 패턴입니다. 이 패턴은 알고리즘의 변화를 클라이언트 코드에 영향을 주지 않고 독립적으로 변경할 수 있게 합니다. 주로 행동(Behavioral) 패턴에 속하며, 런타임 시에 알고리즘을 교체할 수 있는 유연성을 제공합니다.

구조

  • Context: 클라이언트가 사용하는 인터페이스를 정의하고 Strategy 객체를 유지합니다.
  • Strategy: 알고리즘을 캡슐화한 인터페이스입니다.
  • ConcreteStrategy: Strategy 인터페이스를 구현한 구체적인 알고리즘 클래스입니다.

목적

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
*/

주요 포인트

  • 유연성: Strategy 패턴은 알고리즘을 런타임에 교체할 수 있는 유연성을 제공합니다. 클라이언트는 코드 변경 없이 다른 알고리즘을 사용할 수 있습니다.
  • 캡슐화: 알고리즘을 개별 클래스로 캡슐화하여 코드의 가독성을 높이고 유지보수를 쉽게 합니다.
  • 확장성: 새로운 알고리즘을 추가할 때 기존 코드를 수정할 필요 없이 새로운 ConcreteStrategy 클래스를 추가하면 됩니다.
profile
11년차 검색개발자 입니다. 여러 지식과 함께 실제 서비스를 운영 하면서 발생한 이슈에 대해서 정리하고 공유하고자 합니다.

0개의 댓글