카테고리 없음
[스프링 핵심 원리 고급편] 템플릿 메서드 패턴
cme10575
2023. 2. 19. 17:43
템플릿 메서드 패턴
: 변하는 것과 변하지 않는 것을 분리
예상)
로직을 따로 분리하기?
공통기능 로직을 가진 클래스를 extends를 해서 override함 -> 리턴값을 맞출 수 없을 것 같음
변하지 않는 부분은 부모클래스에 정의, 변하는 부분은 자식에서 오버라이드
템플릿 메서드 패턴의 단점
클래스를 계속 만들어야 함 -> 익명 내부클래스 를 만들면 된다.
예상)
리턴값을 커스텀할 수 없음
리턴값 설정
제네릭을 통해서 해결가능함
AbstractTemplate<T> 로 만들어두면, 클래스를 만들 때 type을 넣어줄 수 있음
메서드의 반환값을 T로 두면 반환값 세팅 가능
-> 제네릭 설정은 클래스단위인데, execute는 메서드 단위임
두 개 이상의 메서드가 있고 각각 다른 타입을 리턴하고 싶으면 어떡함?
void의 객체타입은 Void!
정리
템플릿 메서드 패턴
부모클래스에 변하지 않는 골격을 정의해두고
자식클래스에 변하는 로직을 정의해둠
단일책임원칙 만족 (단일책임원칙은 변경 필요할 때 준수되었는지 드러남)
단점
자식과 부모가 강결합됨
상속에서 오는 단점을 그대로 가져감
자식 입장에서 부모 로직 사용안하는데, 부모클래스 기능을 모두 가지고 있는 형태
--> 전략 패턴 사용