템플릿 콜백 패턴

slee2·2022년 3월 7일
0

시작

ContextV2 는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy 의 코드를 실행해서 처리한다. 이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라 한다.

콜백이란
프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.

ContextV2에서 콜백은 Strategy이다.
ContextV2.execute(...)를 실행할때, Strategy를 넘겨주고, ContextV2뒤에서 Strategy가 실행된다.

자바 언어에서 콜백

  • 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다.
  • 자바 8 이전에는 익명 클래스를 사용했고, 이후에는 람다를 주로 사용한다.

참고로 템플릿 콜백 패턴은 GOF 패턴은 아니고, 스프링 내부에서 이런 방식을 자주 사용하기 때문에, 스프링 안에서만 이렇게 부른다. 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이라 생각하면 된다.

스프링에서는 JdbcTemplate , RestTemplate ,TransactionTemplate , RedisTemplate 처럼 다양한 템플릿 콜백 패턴이 사용된다. 스프링에서 이름에 XxxTemplate 가 있다면 템플릿 콜백 패턴으로 만들어져 있다 생각하면 된다.

예제

ContextV2와 내용이 같고 이름만 다르다.

Callback

TimeLogTemplate

테스트

적용

TraceCallback

TraceTemplate

V5

Controller

this.template = new TraceTemplate(trace) : trace 의존관계 주입을 받으면서 필요한 TraceTemplate 템플릿을 생성한다. 참고로 TraceTemplate 를 처음부터 스프링 빈으로 등록하고 주입받아도 된다.

template.execute(.., new TraceCallback(){..}) : 템플릿을 실행하면서 콜백을 전달한다.

Service

Repository

람다까지 쓰니까 훨씬 간단하게 처리되는 것을 확인할 수 있다.

0개의 댓글