전략 패턴에 대해서 설명해주세요

전략 패턴은 객체의 행위를 직접 수정하지 않고, 추상화된 전략의 구현체를 교체해 동작을 바꾸는 디자인 패턴입니다.

핵심 아이디어

객체의 행위를 인터페이스로 정의하고, 이 인터페이스를 구현하는 여러 전략을 외부에서 주입합니다. Context는 구체 전략이 아니라 인터페이스에 의존하므로 전략을 쉽게 교체할 수 있습니다.

interface MoveStrategy {
    boolean isMovable(int input);
}

class EvenNumberMoveStrategy implements MoveStrategy {
    @Override
    public boolean isMovable(int input) {
        return input % 2 == 0;
    }
}

class Car {
    private final MoveStrategy strategy;
    private final int position;

    Car(MoveStrategy strategy, int position) {
        this.strategy = strategy;
        this.position = position;
    }

    Car move(int input) {
        if (strategy.isMovable(input)) {
            return new Car(strategy, position + 1);
        }
        return this;
    }
}

언제 유용한가

정리

전략 패턴은 변하는 행위를 전략 객체로 분리하고, Context는 전략 인터페이스에 의존하게 만드는 패턴입니다. 새로운 행위가 필요하면 기존 코드를 크게 수정하지 않고 전략 구현체를 추가하면 됩니다.

추가 학습 자료

CSLOG에서 보기