minstudio

전략 패턴 (Strategy)

전략 패턴(Strategy Pattern)은 실행 도중(Runtime)에 객체의 동작 방식(알고리즘)을 마음대로 바꿔치기(Swap)할 수 있게 해주는 패턴입니다.

RPG 게임 캐릭터가 무기를 검에서 활로 바꾸면 공격 동작이 완전히 달라집니다. 이때 캐릭터 클래스 안에 수많은 if-else문을 넣지 않고, 무기 자체를 하나의 '전략 인터페이스'로 캡슐화하여 조립(Composition)하는 방식으로 결합도를 낮춥니다.

⚔️ Strategy: 실행 중 동작 알고리즘 갈아끼우기 Player Character Weapon weapon; setWeapon(Weapon) attack() -> weapon.use() 위임(Delegate) << interface >> Weapon Sword (검: 베기!) Bow (활: 쏘기!) Magic (마법: 파이어!)
// Strategy
interface SortingStrategy {
    void sort(int[] array);
}

class BubbleSort implements SortingStrategy {
    public void sort(int[] array) {
        System.out.println("버블 정렬로 정렬합니다.");
    }
}

class QuickSort implements SortingStrategy {
    public void sort(int[] array) {
        System.out.println("퀵 정렬로 정렬합니다.");
    }
}

// Context
class SortManager {
    private SortingStrategy strategy;
    
    // 전략을 동적으로 교체
    public void setStrategy(SortingStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void executeSort(int[] array) {
        strategy.sort(array);
    }
}

public class Main {
    public static void main(String[] args) {
        SortManager manager = new SortManager();
        int[] data = {3, 1, 4, 1, 5};
        
        manager.setStrategy(new BubbleSort());
        manager.executeSort(data); // 버블 정렬
        
        manager.setStrategy(new QuickSort());
        manager.executeSort(data); // 퀵 정렬
    }
}
전략 패턴 (Strategy) | Minstudio