전략패턴과 템플릿 메서드 패턴은 문제상황을 공유한다. 여러 클래스에서 반복되면서 변하지 않는 코드 + 변하는 코드를 갖고 있다. 이 문제를 전략 패턴은 어떻게 풀어갈까?
전략패턴은 변하지 않는 부분을 Context
라는 곳에 두고, 변하는 부분을 Strategy
라는 인터페이스에 둔다. 그리고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 이를 두고 상속이 아니라 위임으로 문제를 해결한다고 한다.
gof에서는 전략패턴을 다음처럼 설명한다.
💡 알고리즘 제품군을 정의하고 각각을 캡슐화해 상호교환하게 만든다. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 만들 수 있다.
실제로 패턴을 만들어보자.
먼저 Strategy
인터페이스를 만든다.
public interface Strategy {
void call();
}
그리고 이를 구현하는 구현체를 만든다.
@Slf4j
public class StrategyLogic1 implements Strategy {
@Override
public void call() {
log.info("비즈니스 로직1 실행");
}
}
그리고 이 전략을 갈아끼우며 동작하는 Context를 만든다. 여기에 부가 로직들이 다 모여있다.