프로그래밍에서 콜백 또는 콜애프터 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수 있고, 아니면 나중에 실행할 수 있다.
자바에서 콜백 함수란 자바8 이후에는 하나의 메소드를 가진 인터페이스를 구현하고 람다로 이를 넘긴다.
GOF 패턴은 아니고 스프링 내부에서 자주 사용하는 패턴으로 스프링 안에서만 부르는 방식이고 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이다.
EX) JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate 등
이전 파라미터로 인수를 넘기는 전략 패턴 포스터의 예제가 템플릿 콜백 패턴이다.
// Context -> Template
@Slf4j
public class TimeLogTemplate {
public void execute(Callback callback){
long startTime = System.currentTimeMillis();
//비지니스 로직 실행
callback.call();
//비지니스 로직 종료
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
// Strategy -> Callback
@Slf4j
public class Template {
@Test
void callbackTest(){
TimeLogTemplate template = new Template();
template.execute(new CallbackLogic1());
template.execute(new Callback() {
@Override
public void call() {
log.info("비지니스 로직2 실행");
}
});
template.execute(() -> log.info("비지니스 로직3 실행"));
}
}
// 결과
15:49:22.645 [main] INFO CallbackLogic1 - 비지니스 로직1 실행
15:49:22.648 [main] INFO TimeLogTemplate - resultTime=5
15:49:22.651 [main] INFO callbackTest - 비지니스 로직2 실행
15:49:22.651 [main] INFO TimeLogTemplate - resultTime=0
15:49:22.651 [main] INFO callbackTest - 비지니스 로직3 실행
15:49:22.651 [main] INFO TimeLogTemplate - resultTime=0