템플릿 콜백 패턴

jhin·2025년 6월 12일
0

다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라고 함

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

🔄 템플릿 콜백 패턴이란?
템플릿(Template): 고정된 흐름 또는 공통 로직
콜백(Callback): 변화하는 부분, 즉 사용자 정의 동작을 나중에 주입

대표적으로 JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate 같은 클래스에서 볼 수 있다고 함

🤔왜 템플릿 콜백 패턴을 써야 할까?

  1. 중복 제거 (코드 재사용성 향상)
    공통된 흐름(예: 리소스 열기 → 작업 수행 → 리소스 닫기)을 템플릿이 처리하고, 변경되는 핵심 작업만 콜백으로 전달하면 되니까 중복이 사라짐
    예: DB 커넥션 열고 닫는 부분은 항상 같고, 쿼리만 달라진다면?
    template.execute(new Callback() {
       public void doInCallback(Connection conn) {
           // 쿼리 실행
       }
    });
  2. 변경에 유연 (OCP 원칙 충족)
    템플릿 코드는 고정된 상태로 두고, 콜백만 바꾸면 됨
  3. 책임 분리 (SRP 원칙 충족)
    공통 흐름 관리 → 템플릿에게
    실제 처리 로직 → 콜백에게
  4. 에러 처리 및 리소스 정리 통합
    예외 처리, 리소스 정리(try-catch-finally 등)를 템플릿이 담당하므로 안정성과 일관성 확보

✍️ 비유로 정리하면?

커피 머신(템플릿)이 있다고 칩시다.
물을 끓이고 컵에 따르고 청소하는 일은 머신이 처리하고,
어떤 원두(콜백)를 넣을지는 사용자에게 맡기는 구조!

🧠 한 줄 요약

템플릿 콜백 패턴은 공통된 흐름은 템플릿이 담당하고, 변하는 핵심 로직만 콜백으로 분리해서 재사용성과 유연성을 높이는 패턴이다.

0개의 댓글