개발/Spring
[Spring] - 스프링에서 자주보이는 xxxTemplate
dongdev
2022. 7. 20. 00:33
스프링프레임워크로 작업 시, JdbcTemplate, RabbitTemplate, RedisTemplate 등 xxxTemplate 형태를 많이 볼 수 있다.
이러한 형태를 템플릿 콜백 패턴이라 한다. GOF 패턴은 아니지만 GOF패턴의 전략 패턴과 아주 유사하다.
그럼 콜백이란 무엇일까?
콜백이란?
다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다.
쉽게 말해, callback은 코드가 호출(call)은 되는데 코드를 넘겨준 곳의 뒤(back)에서 실행된다는 뜻이다.
코드로 보면 더 쉽게 이해가 될 것이다!
*참고: 아래 코드들은 테스트코드로 작성했다.
Callback 인터페이스
public interface Callback {
void call();
}
유연하게 변경가능한 콜백 로직을 전달할 인터페이스
TimeLogTemplate
@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);
}
}
콜백을 실행할 고정적인 템플릿
TemplateCallback
@Slf4j
public class TemplateCallbackTest {
//템플릿 콜백 패턴-익명 내부 클래스
@Test
void callbackV1() {
TimeLogTemplate template = new TimeLogTemplate();
template.execute(new Callback() {
@Override
public void call() {
log.info("익명-콜백1 실행");
}
});
template.execute(new Callback() {
@Override
public void call() {
log.info("익명-콜백2 실행");
}
});
}
//템플릿 콜백 패턴-람다
@Test
void callbackV2() {
TimeLogTemplate template = new TimeLogTemplate();
template.execute(() -> log.info("람다-콜백1 실행"));
template.execute(() -> log.info("람다-콜백2 실행"));
}
}
자바8의 람다기능을 사용하면 더 간단하게 표현이 가능하다.
테스트 코드 실행
위에 코드들을 보면 template.execute(~)로 전달받은 Callback의 call()함수를 전달받은 template 클래스 뒤에서 실행하고 있는 것을 볼 수 있다. 그림으로 보면 아래와 같다.
스프링 안에서 자주 볼 수 있으니, 마주친다면 위 내용을 한번 대입해보자!