노트코드
노트코드
노트코드

블로그 메뉴

  • 홈
  • 이력서
  • 이전 블로그
  • 글쓰기
  • 관리자페이지
  • 분류 전체보기 (57)
    • 코틀린 (2)
      • 실무 프로젝트로 배우는 Kotlin & Sprin.. (2)
    • JAVA (1)
      • 디자인패턴 (1)
      • 객체지향 5대원칙 (0)
    • SPRING (32)
      • JPA (11)
      • 스프링시큐리티 (1)
      • 스프링 (8)
      • QueryDsl (1)
      • 스프링배치 (11)
    • AZURE (0)
    • ETC (10)
      • MAVEN (0)
      • GIT (0)
      • ReMind (3)
      • Exception (1)
      • CS (6)
    • 책 (8)
      • 이것이 자바다 (8)

최근 글

최근 댓글

태그

  • JPA
  • 스프링
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
노트코드

노트코드

SPRING/스프링

[스프링 핵심 원리-고급] 템플릿 콜백 패턴

2022. 1. 27. 01:20
다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백이라고 한다.
프로그래밍에서 콜백 또는 콜에프터 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다.
콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.

 

자바 언어에서의 콜백

1. 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다. 자바8부터는 람다를 사용할 수 있다.

2. 자바 8이전에는 보통 하나의 메소드를 가진 인터페이스를 구현했고, 주로 익명 내부 클래스를 사용했다.

3. 최근에는 주로 람다를 사용한다.

 

스프링에서의 템플릿 콜백 패턴(ex-> XxxTemplate)

- JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate처럼 다양한 템플릿 콜백 패턴을 사용한다.

 

예제

public interface Callback {
    void 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);
        
    }
}

 

@Slf4j
public class TemplateCallbackTest {

    @Test
    void callbackV1() {
        TimeLogTemplate template = new TimeLogTemplate();
        template.execute(new Callback() {
            @Override
            public void call() {
                log.info("비즈니스 로직 실행1");
            }
        });

        template.execute(new Callback() {
            @Override
            public void call() {
                log.info("비즈니스 로직 실행2");
            }
        });
    }

    @Test
    void callbackV2() {
        TimeLogTemplate template = new TimeLogTemplate();
        template.execute(() -> log.info("비즈니스 로직 실행1"));

        template.execute(() -> log.info("비즈니스 로직 실행2"));
    }
}

 

'SPRING > 스프링' 카테고리의 다른 글

[스프링 핵심 원리 - 고급편]인터페이스 ,클래스 기반의 프록시  (0) 2022.02.17
[스프링 핵심 원리 - 고급편] 프록시, 프록시 패턴, 데코레이터 패턴  (0) 2022.02.16
[스프링 핵심 원리 -고급] 전략패턴  (0) 2022.01.27
[스프링 핵심 원리-고급] 템플릿 메서드 패턴  (0) 2022.01.25
[스프링 핵심 원리-고급] 쓰레드 로컬 주의사항  (0) 2022.01.22
    'SPRING/스프링' 카테고리의 다른 글
    • [스프링 핵심 원리 - 고급편]인터페이스 ,클래스 기반의 프록시
    • [스프링 핵심 원리 - 고급편] 프록시, 프록시 패턴, 데코레이터 패턴
    • [스프링 핵심 원리 -고급] 전략패턴
    • [스프링 핵심 원리-고급] 템플릿 메서드 패턴
    노트코드
    노트코드
    노션 블로그에서 티스토리로 이전공사중

    티스토리툴바