템플릿 콜백 패턴

종원유·2022년 3월 13일
0

Java

목록 보기
8/11
post-thumbnail

템플릿 콜백 패턴

  • 템플릿 콜백 패턴이란?
  • 스프링에서는 전략 패턴을 템플릿 콜백 패턴이라 한다. Context에 Strategy부분이 콜백으로 넘어온다 라고 생각하면 된다.
    ex) Context -> Template, Strategy -> Callback
  • 참고로 템플릿 콜백 페턴은 GoF 패턴은 아니고, 스프링 내부에서 이런 방식을 자주 사용하기 때문에, 스프링 안에서만 이렇게 부른다. 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이라고 생각하면 된다.
  • 스프링에서는
    • JdbcTemplate, RestTemplate,
    • TransactionTemplate,
    • RedisTemplate
      XxxTemplate가 있다면 템플릿 콜백 패턴으로 만들어져 있다고 생각하면 된다.

콜백

  • 콜백이란?
  • 프로그래밍에서 콜백 또는 콜애프터 함수는 다른 코드의 인수로써 넘겨주는 실행 가능한 코드를 말한다.
    ( 스프링에서는 객체로 전달한다. )
  • 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 나중에 실행할 수 도 있다.

템플릿 콜백 패턴의 동작 구조

클라이언트가 execute(callback)를 실행하면 execute()에서 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);
    }

}

//함수형 인터페이스 
public interface Callback {

    void call();
}

@Slf4j
public class TemplateCallbackTest {

    /**
     * 템플릿 콜백 패턴 - 익명 내부 클래스
     */
    @Test
    void callbackV1(){
        TimeLogTemplate template = new TimeLogTemplate();
		//전략 1
        template.execute(() -> log.info("비즈니스 로직1 실행"));
		//전략 2
        template.execute(() -> log.info("비즈니스 로직2 실행"));

    }
}


별도의 클래스를 만들어서 전달해도 되지만, 콜백을 사용할 경우 익명 내부 클래스나 람다를 사용하는 것이 편리하다.
여러 곳에서 함께 사용되는 경우 재사용을 위해 콜백을 별도의 클래스로 만들어도 된다.

profile
개발자 호소인

0개의 댓글