🗣 템플릿 콜백 패턴
여러 클래스에서 반복되는 로직이지만, 로직의 일부분만 클래스별로 다르게 처리해야 할 때 사용하는 디자인 패턴.
템플릿 메서드 패턴, 전략패턴과 기능은 유사하지만 아래와 같은 차이점이 있다.
🆚 템플릿 메서드 패턴 & 전략패턴
디자인 패턴 | 변하지 않는 로직 | 변하는 로직 |
템플릿 메서드 패턴 | 부모클래스 | 자식클래스 |
전략 패턴 | 클래스, Context로 표현 | 인터페이스 구현 클래스, Strategy로 표현 |
템플릿 콜백 패턴 | 클래스, Template으로 표현 | 인터페이스 구현 클래스, Callback으로 표현 |
📚 사전지식
- 인터페이스
- 다형성
- 오버라이딩
🏗 구조
1. Callback 인터페이스를 구현한 클래스를
2. Template 메서드의 파라미터로 전달하고
3. Template 메서드 내부에서 실행
![](https://blog.kakaocdn.net/dn/bBy9kk/btsHGasFA6m/ToQNM8mk9iTmkhxdVFZxW0/img.png)
🏭 구현
1. Callback
public interface Callback {
void call();
}
2. Template
public class Template {
public void execute(Callback callback) {
long startTime = System.currentTimeMillis();
//비즈니스 로직 실행
callback.call(); //위임
//비즈니스 로직 종료
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
🚂 사용
@Test
void callbackV1() {
TimeLogTemplate template = new TimeLogTemplate();
// 방식1. 익명 내부 클래스
template.execute(new Callback() {
@Override
public void call() {
log.info("비즈니스 로직1 실행");
}
});
// 방식2. 람다
template.execute(() -> log.info("비즈니스 로직1 실행"));
}
참고
스프링에서 XxxTemplate을 본다면 템플릿 콜백 패턴의 내용을 떠올리자
스프링 핵심 원리 - 고급편 | 김영한 - 인프런
김영한 | 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기
www.inflearn.com