스프링/스프링 핵심 원리 - 고급편

17. 템플릿 메서드 패턴

sdafdq 2024. 1. 14. 22:18

스프링에서 사용하는 디자인 패턴들을 알아볼 것이다.

템플릿 메서드 패턴

전략 패턴

템플릿 콜백 패턴

 

프록시 패턴

데코레이션 패턴

 

팩토리 패턴? 도 배울 것 같다.

 

 

이번엔 템플릿 메서드 패턴.

 

기존의 코드 보면.

 

@GetMapping("/v2/request")
public String request(@RequestParam("itemId") String itemId){
    TraceStatus status = null;
    try{
        status = trace.begin("OrderController.request()");
        orderService.orderItem(status.getTraceId(),itemId);
        trace.end(status);
        return "ok";
    } catch (Exception e){
        trace.exception(status, e);
        throw e;
    }
}

이런 식으로 지저분 하다.

 

여기서 이 컨트롤러의 핵심 로직은, 저 orderService.orderItem 밖에 없다.

 

위 아래로 try catch를 비롯하여 미사여구가 잔뜩 붙어있다.

 

따지고 보면,

TraceStatus status = null;
try{
    status = trace.begin("OrderService.orderItem()"); // 현재 메소드 명

    //로직

    trace.end(status);
} catch (Exception e){
    trace.exception(status, e);
    throw e;
}

이런 형태이다.

 

저 부분들은 고정된 것 이기 때문에,

우리는 현재 메소드 명과 로직만 넣어주면 된다.

 

저렇게 고정된 것에서 일정 부분만 바뀌는 것, 

이 문제를 효과적으로 해결하기 위한 디자인 패턴이 바로 템플릿 메소드 패턴이다.

 

대략 아까 쓰레드 이용 했듯이,

저기 안에 인자로 로직을 넣는 것이 아닐까? 

supplier도 있고.

 

 

'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글

19. 익명 클래스  (0) 2024.01.15
18. 템플릿 메서드 패턴 예제  (0) 2024.01.14
16. 쓰레드로컬 주의사항  (0) 2024.01.14
15. 쓰레드로컬 적용  (0) 2024.01.14
14. 쓰레드로컬 예시  (0) 2024.01.14