[Java] Template Callback Pattern

charco·2021년 7월 29일
0

나도TIL

목록 보기
15/55
post-custom-banner

템플릿 콜백이란?

템플릿 콜백 패턴은 변하지 않는 부분은 냅두고 변하는 부분은 커스터마이징하여 사용할 수 있게 해준다.

클라이언트는 템플릿 오브젝트의 메서드에 콜백을 구현해 제공한다.
템플릿은 메서드 수행중에 제공받은 콜백 메서드를 호출하고 그 반환값을 사용해 나머지 작업을 수행한다. 그림으로 보자면 이렇다.

구현해보기

햄버거를 만들자. 템플릿에는 빵이 있고
우리는 패티를 콜백으로 제공할 것이다.

Hamburger class(템플릿)


public class Hamburger {

    public void makeBurger(Patty patty){
        System.out.println("참깨빵");
        //콜백 메서드 호출
        String pattyName = patty.getPattyName();
		
        if(pattyName.equals("순쇠고기")){
            pattyName += " 패티두장";
        } else if(pattyName.equals("특별한 소스")){
            pattyName += " 양상추";
        }

        System.out.println(pattyName);

        System.out.println("참깨빵");
    }
}

Patty interface(콜백)


//함수형 인터페이스라는 것을 명시
@FunctionalInterface
public interface Patty {

    String getPattyName();
}

Cook class (클라이언트)

public class Cook {

    public void cookBurger(){
        Hamburger hamburger = new Hamburger();
        hamburger.makeBurger(new Patty() {
            @Override
            public String getPattyName() {
                return "순쇠고기";
            }
        });
        // 람다식을 이용해 ()-> "순쇠고기"; 이런식으로 더 간결하게 작성할 수 잇다.
    }
}

Test

public class test {
    public static void main(String[] args) {
        Cook cook = new Cook();
        cook.cookBurger();
    }
//    결과)
//    참깨빵
//    순쇠고기 패티두장
//    참깨빵
}

스프링의 JdbcTemplate 은 실제로 이 패턴을 응용해 설계됐다고 한다.
JdbcTemplate 은
Connection 과 같은 리소스들을 가져오고
쿼리를 실행하고(콜백)
다시 리소스들을 반환해 준다.

profile
아직 배우는 중입니다
post-custom-banner

0개의 댓글