카테고리 없음

[스프링 핵심 원리 고급편] 템플릿 메서드 패턴

cme10575 2023. 2. 19. 17:43

템플릿 메서드 패턴

: 변하는 것과 변하지 않는 것을 분리

 

예상)
로직을 따로 분리하기?
공통기능 로직을 가진 클래스를 extends를 해서 override함 -> 리턴값을 맞출 수 없을 것 같음

변하지 않는 부분은 부모클래스에 정의, 변하는 부분은 자식에서 오버라이드

 

 

템플릿 메서드 패턴의 단점

클래스를 계속 만들어야 함 -> 익명 내부클래스 를 만들면 된다.

예상)
리턴값을 커스텀할 수 없음

 

 

리턴값 설정

제네릭을 통해서 해결가능함

AbstractTemplate<T> 로 만들어두면, 클래스를 만들 때 type을 넣어줄 수 있음

메서드의 반환값을 T로 두면 반환값 세팅 가능

-> 제네릭 설정은 클래스단위인데, execute는 메서드 단위임

두 개 이상의 메서드가 있고 각각 다른 타입을 리턴하고 싶으면 어떡함?

void의 객체타입은 Void!

 

 

 

정리

템플릿 메서드 패턴

부모클래스에 변하지 않는 골격을 정의해두고

자식클래스에 변하는 로직을 정의해둠

단일책임원칙 만족 (단일책임원칙은 변경 필요할 때 준수되었는지 드러남)

 

단점

자식과 부모가 강결합됨

상속에서 오는 단점을 그대로 가져감

자식 입장에서 부모 로직 사용안하는데, 부모클래스 기능을 모두 가지고 있는 형태

 

--> 전략 패턴 사용