참고 1. 스프링-핵심-원리-고급편, 김영한
참고 2. 위키백과
콜백
콜백(함수)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행 혹은 나중에 실행할 수 있다.
이전 글의 전략 패턴에서 Context의 execute를 실행하면, strategy의 call이 실행됐다. 여기서, strategy는 Context 뒤에서 동작하므로, strategy는 콜백에 해당한다.
*스프링 내부에서 자주 보이는 패턴으로, GOF 패턴은 아님.
*스프링에서 "~Template" 형식의 템플릿들은 템플릿 콜백 패턴으로 만들어져 있음.
예시
1. callback 인터페이스 정의
public interface CallBack {
void call();
}
2. template 정의
public class TimeLogTemplate {
public void execute(CallBack callBack) {
long startTime = System.currentTimeMillis();
callBack.call();
long endTime = System.currentTimeMillis();
log.info("result time = {}", endTime - startTime);
}
}
3. template의 execute 실행
public class TemplateCallBackTest {
@Test
void callbackV1() {
TimeLogTemplate template = new TimeLogTemplate();
template.execute(() -> {
log.info("로직 1 실행");
});
template.execute(() -> {
log.info("로직 2 실행");
});
}
}
템플릿 콜백 패턴 vs 전략 패턴
템플릿 콜백 패턴은 전략 패턴과 명칭만 다르고, 거의 똑같다. 이 두 패턴의 차이는 의도에 있다고 본다.
- 먼저, 전략 패턴의 경우 각 전략(strategy)들을 미리 정의해두고, 각각의 전략들을 상황에 맞게 context와 조립하는 패턴이다.
- 템플릿 콜백 패턴은 템플릿에 상황에 적합한 콜백 함수를 전달하는 좀 더 유연한 패턴이다.
'스프링' 카테고리의 다른 글
[Spring] 디자인 패턴 - 데코레이터 패턴 예시 (0) | 2024.04.16 |
---|---|
[Spring] 디자인 패턴 - 프록시 패턴(데코레이터 패턴) (0) | 2024.04.15 |
[Spring] 디자인 패턴 - 전략 패턴 개선하기 (0) | 2024.04.09 |
[Spring] 디자인 패턴 - 전략 패턴 (0) | 2024.04.09 |
[Spring] 디자인 패턴 - 템플릿 메서드 패턴 (0) | 2024.04.08 |