김영한님 스프링 핵심원리 고급편 참고 내용
핵심 기능
: 해당 객체가 제공하는 고유의 기능부가 기능
: 핵심 기능 보조하기 위해 제공템플릿 메서드 패턴(Tempate Method Pattern)
@Slf4j
public abstract class AbstractTemplate {
public void execute() {
long startTime = System.currentTimeMills();
//비즈니스 로직 실행
call(); //상속
//비스니스 로직 종료
long endTime = System.currenTimeMills();
long resultTime = endTime - startTime();
log.info("resultTime={}", resultTime);
}
protected abstract void call();
}
public SubClassLogic1 extends AbstractTemplate {
@Override
protected void call() {
log.info("비즈니스 로직1 실행");
}
}
public SubClassLogic2 extends AbstractTemplate {
@Override
protected voic call() {
log.info("비즈니스 로직2 실행");
}
}
적용 코드
//OrderControllerV4
public String request(String itemId) {
AbstractTempate<String> template = new AbstractTemplate<>(trace) {
@Override
protected String call() {
orderService.orderItem(itemId);
return "ok";
}
};
template.execute("orderController.request()");
}
단일 책임 원칙(SRP)
: 로그를 남기는 부분을 모듈화하고, 비즈니스를 분리했다. 명확한 역할 분리는 변경에 쉽게 대처할 수 있다.상속 관계는 강한 의존 관계를 형성
한다.자식 클래스는 부모 클래스의 기능을 전혀 사용하지 않는다.
이 때 상속을 사용하는 것은 바람직한 설계가 아니다.클래스가 익명 내부 클래스를 만들어야 해서 복잡
해진다.전략 패턴(strategy pattern)
이다.