티스토리 뷰
템플릿 콜백 패턴
프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.
좀 더 풀어서 얘기하면, callback
은 코드가 호출(call
)은 되는데 코드를 넘겨준 곳의 뒤(back
)에서 실행된다는 것이다.
템플릿 콜백 패턴은 GOF 패턴은 아니고, JdbcTemplate
, RestTemplate
, TransactionTemplate
, RedisTemplate
과 같이 스프링 내부에서 자주 사용된다. 이전에 살펴본 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이라 생각하면 된다.
이번에도 역시 요리사들의 요리 시작부터 완성하기까지의 시간을 측정해야 한다고 가정해보고, 템플릿 콜백 패턴을 적용하여 구현해보자.
템플릿 콜백 패턴 적용
@Slf4j
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);
}
}
public interface Callback {
void call();
}
/**
* 템플릿 콜백 패턴 - 익명 내부 클래스
*/
@Test
void anonymousCallback() {
Template template = new Template();
template.execute(new Callback() {
@Override
public void call() {
log.info("한식 요리 시작 !");
}
});
template.execute(new Callback() {
@Override
public void call() {
log.info("중식 요리 시작 !");
}
});
}
결과
/**
* 템플릿 콜백 패턴 - 람다
*/
@Test
void lambdaCallback() {
Template template = new Template();
template.execute(() -> log.info("한식 요리 시작 !"));
template.execute(() -> log.info("중식 요리 시작 !"));
}
결과
Reference
김영한. 스프링 핵심 원리 - 고급편. 인프런.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8#
'Study' 카테고리의 다른 글
[자료구조] priority queue (0) | 2022.08.01 |
---|---|
[자료구조] Linked List (0) | 2022.07.31 |
[Design Pattern] 전략 패턴 (0) | 2022.05.08 |
[Design Pattern] 템플릿 메서드 패턴 (0) | 2022.05.08 |
[Refactoring] 기본형 집착 (0) | 2022.03.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구현
- 노마드코더
- 김영한
- 파이썬
- 스프링 부트
- 노마드
- 코테
- MySQL
- 알고리즘
- leetcode
- Algorithm
- 자료구조
- 문자열
- 릿코드
- 북클럽
- 그리디
- 스프링
- 데이터베이스
- Real MySQL
- 인프런
- Spring
- kotlin
- 백준
- 정렬
- 스프링부트
- spring boot
- 코틀린
- 리팩토링
- webflux
- mysql 8.0
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함