이번 포스트는 인프런 - 스프링 핵심 원리 고급편을 정리한 내용입니다
이전 포스트에서 템플릿 메서드 패턴을 다뤘습니다
전략 패턴 구조

출처: https://blog.naver.com/2feelus/220658663151
템플릿 메서드 패턴
이번 포스트는 인프런 - 스프링 핵심 원리 고급편을 정리한 내용입니다. 템플릿 메서드 패턴은 GoF의 디자인 패턴중 행위 패턴중 하나입니다출처: https://engineering.linecorp.com/ko/blog/templete-method-pat
blogger903.tistory.com
템플릿 메서드 패턴은 Template 추상 클래스에 공통으로 사용할 코드를 두고 Template을 확장한 서브 클래스에서 비즈니스 로직을 구현하면서 비즈니스 로직과 반복되는 부가 로직을 분리하였고, 각 코드들의 응집도도 높였습니다
상속을 사용하다보니, 상속으로 인한 단점도 가져가게 됩니다
전략패턴은 상속을 사용하지 않고, 템플릿 메서드의 장점을 그대로 가져갑니다
"상속보다는 컴포지션"이란 오브젝트 책에서 알게 됐는데, 전략패턴이 구조적으로 개선되어 좋습니다
코드는 한번 적용하면 수정하기가 어렵고, 잘못 발전할 수 있는 문제가 있기 때문에 신중하게 설계하고 코드를 작성해야합니다
ContextV1은 반복되는 부가 로직과 컨텍스트를 가집니다
@Slf4j
public class ContextV1 {
private Strategy strategy;
public ContextV1(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
// 템플릿 로직
sth();
//비즈니스 로직 실행
strategy.call(); //위임
//비즈니스 로직 종료
}
}
각 비스니스 로직이 실행할 인터페이스를 생성합니다
public interface Strategy {
void call();
}
비즈니스 로직을 작성할 구현체를 추가합니다
@Slf4j
public class StrategyLogic1 implements Strategy {
@Override
public void call() {
log.info(StrategyLogic1.class.getName()+ " 로직 실행");
}
}
전략 패턴을 구성하게되면, Strategy를 구현한 또 다른 비즈니스 로직을 ContextV1에 적용해도 Context는 변경할 필요가 없습니다
'디자인패턴' 카테고리의 다른 글
SOLID - SRP (0) | 2024.09.19 |
---|---|
소프트웨어 설계원칙 - 관심사 분리 (0) | 2024.08.07 |
템플릿 메서드 패턴 (0) | 2024.06.16 |