🗣 전략 패턴
여러 클래스에서 반복되는 로직이지만, 로직의 일부분만 클래스별로 다르게 처리해야 할 때 사용하는 디자인 패턴.
템플릿 메서드 패턴과 기능은 유사하지만 아래와 같은 차이점이 있다.
🆚 템플릿 메서드 패턴
디자인 패턴 | 변하지 않는 로직 | 변하는 로직 |
템플릿 메서드 패턴 | 부모클래스 | 자식클래스 |
전략 패턴 | 클래스, Context로 표현 | 인터페이스 구현 클래스, Strategy로 표현 |
📚 미리 알고 있어야 하는 내용
- 인터페이스
- 다형성
- 오버라이딩
🏗 전략 패턴 구조
1. Strategy 인터페이스를 구현한 클래스를
2. Context 메서드의 파라미터로 전달하고
3. Context 메서드 내부에서 실행
🏭 전략 패턴 구현
1. Strategy
public interface Strategy {
void call();
}
2. Strategy Implements
public class StrategyLogic1 implements Strategy {
@Override
public void call() {
// 비즈니스 로직 실행
}
}
3. Context Class
public class Context {
public void execute(Strategy strategy) {
long startTime = System.currentTimeMillis();
//비즈니스 로직 실행
strategy.call(); //위임
//비즈니스 로직 종료
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
🚂 전략 패턴 사용
@Test
void strategy() {
Context context = new Context();
context.execute(new Strategy() {
@Override
public void call() {
// 비즈니스 로직1 실행
}
});
}
👍 전략 패턴 장점
Context는 Strategy 인터페이스에만 의존하기 때문에 Strategy의 구현체를 변경해도 Context 코드에 영향을 주지 않는다.
스프링 핵심 원리 - 고급편 | 김영한 - 인프런
김영한 | 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기
www.inflearn.com