다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백이라고 한다.
프로그래밍에서 콜백 또는 콜에프터 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다.
콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.
자바 언어에서의 콜백
1. 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다. 자바8부터는 람다를 사용할 수 있다.
2. 자바 8이전에는 보통 하나의 메소드를 가진 인터페이스를 구현했고, 주로 익명 내부 클래스를 사용했다.
3. 최근에는 주로 람다를 사용한다.
스프링에서의 템플릿 콜백 패턴(ex-> XxxTemplate)
- JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate처럼 다양한 템플릿 콜백 패턴을 사용한다.
예제
public interface Callback {
void call();
}
@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);
}
}
@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"));
}
}
'SPRING > 스프링' 카테고리의 다른 글
[스프링 핵심 원리 - 고급편]인터페이스 ,클래스 기반의 프록시 (0) | 2022.02.17 |
---|---|
[스프링 핵심 원리 - 고급편] 프록시, 프록시 패턴, 데코레이터 패턴 (0) | 2022.02.16 |
[스프링 핵심 원리 -고급] 전략패턴 (0) | 2022.01.27 |
[스프링 핵심 원리-고급] 템플릿 메서드 패턴 (0) | 2022.01.25 |
[스프링 핵심 원리-고급] 쓰레드 로컬 주의사항 (0) | 2022.01.22 |