Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- transaction
- spring
- 인프런
- kotlin
- JPQL
- springdatajpa
- Android
- Greedy
- http
- 스프링
- JDBC
- jpa
- 백준
- Exception
- Thymeleaf
- AOP
- pointcut
- Servlet
- 스프링 핵심 기능
- db
- 스프링 핵심 원리
- 김영한
- Spring Boot
- QueryDSL
- 그리디
- Proxy
- SpringBoot
- java
- 알고리즘
Archives
- Today
- Total
개발자되기 프로젝트
Template CallBack - 시작 본문
ContextV2는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy의 코드를 실행해서 처리한다.
이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 Callback이라 한다.
- 템플릿 콜백 패턴은 전략 패턴의 변형으로,
- 스프링의 3대 프로그래밍 모델 중 하나인 DI(의존성 주입)에서 사용하는 특별한 형태의 전략 패턴이다.
- 템플릿 콜백 패턴은 전략 패턴과 모든 것이 동일한데 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다.
1. Callback 정의
프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. (위키백과 참고)
- callback 은 코드가 호출( call )은 되는데 코드를 넘겨준 곳의 뒤( back )에서 실행된다는 뜻이다.
- callback : 호출될 함수를 다른 프로그램이나 모듈에 알리는 방법.
- ContextV2 예제에서 콜백은 Strategy 이다.
- 여기에서는 클라이언트에서 직접 Strategy 를 실행하는 것이 아니라,
클라이언트가 ContextV2.execute(..) 를 실행할 때 Strategy 를 넘겨주고, - ContextV2 뒤에서 Strategy 가 실행된다.
2. 자바 언어에서의 콜백
- 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다. 자바8부터는 람다를 사용할 수 있다.
- 자바 8 이전에는 보통 하나의 메소드를 가진 인터페이스를 구현하고, 주로 익명 내부 클래스를 사용했다.
- 최근에는 주로 람다를 사용한다.
3. 템플릿 콜백 패턴
- 스프링에서는 ContextV2 와 같은 방식의 전략 패턴을 템플릿 콜백 패턴이라 한다.
- 전략 패턴에서 Context 가 템플릿 역할을 하고, Strategy 부분이 콜백으로 넘어온다 생각하면 된다.
- 참고로 템플릿 콜백 패턴은 GOF 패턴은 아니고, 스프링 내부에서 이런 방식을 자주 사용하기 때문에,
스프링 안에서만 이렇게 부른다. - 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이라 생각하면 된다.
- 스프링에서는 JdbcTemplate , RestTemplate , TransactionTemplate , RedisTemplate 처럼 다양한
템플릿 콜백 패턴이 사용된다. - 스프링에서 이름에 XxxTemplate 가 있다면 템플릿 콜백 패턴으로 만들어져 있다 생각하면 된다.
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
Template CallBack - 2 (0) | 2021.11.22 |
---|---|
Template CallBack - 1 (0) | 2021.11.22 |
Strategy Pattern - 3 (0) | 2021.11.22 |
Strategy Pattern - 2, 익명 내부 클래스 (0) | 2021.11.22 |
Strategy Pattern - 1 (0) | 2021.11.22 |
Comments