728x90
반응형
728x90
Template Method 패턴
- 디자인 패턴 중 하나로 상위 클래스에서 로직을 정의하고 일부 단계를 하위 클래스에서 구체적으로 구현하도록 하는 패턴
- 상속과 오버라이딩을 통한 다형성으로 문제를 해결하는 방식
사용 방법
- 공통된 로직을 정의한 부모 클래스를 생성
- 사용마다 변경되는 부분을 상속을 통해 자식 클래스에서 구현하게 정의
- 자식 클래스는 부모 클래스를 상속 받아 해당 메서드를 구현
//부모 클래스
public abstract class ParentClass {
public final void execute() {
long startTime = System.currentTimeMillis(); //공통 로직
beforeCall(); // 선택적인 훅 메서드
call(); // 반드시 구현해야 하는 추상 메서드
afterCall(); // 선택적인 훅 메서드
long endTime = System.currentTimeMillis(); //공통 로직
long resultTime = endTime - startTime; //공통 로직
log.info("resultTime={}", resultTime); //공통 로직
}
// 훅(Hook) 메서드 - 선택적으로 오버라이딩 가능
protected void beforeCall() {
// 기본 구현은 비어있음
}
protected void afterCall() {
// 기본 구현은 비어있음
}
//protected를 사용해 템플릿 메서드 패턴의 내부 동작을 외부에 노출하지 않고
//상속 관계에서만 접근 가능하도록 캡슐화
protected abstract void call(); //자식 클래스에서 반드시 구현해야 하는 추상 메서드
}
//자식 클래스
public class ChildClass extends ParentClass{
@Override
protected void call() {
log.info("로직 실행"); // 구체적인 로직 구현
}
@Override
protected void beforeCall() {
log.info("로직 실행 전 처리");
}
}
//익명 클래스 사용
ParentClass template = new ParentClass() {
@Override
protected void call() {
log.info("로직 실행");
}
};
template.execute();
장점
- 공통 로직을 상위 클래스에 두어 중복을 줄임
- 로직 구조는 유지하면서 하위 클래스에서 세부 구현만 변경가능
- 알고리즘의 흐름을 일관되게 유지할 수 있음
단점
- 상위 클래스의 변경이 하위 클래스에 영향을 줄 수 있음 -> 특정 클래스를 강하게 의존
- 상속을 사용하는 방법으로 상속이 가져오는 문제점을 그대로 가져옴
- 하위 클래스에서 상위 클래스의 로직을 전혀 사용하지 않으나 상속 받아야 함
스프링 핵심 원리 - 고급편 강의 | 김영한 - 인프런 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] Proxy & Decorator Pattern (0) | 2024.11.02 |
---|---|
[Spring] Strategy & Template Callback (0) | 2024.11.01 |
[Spring] Thread Pool & ThreadLocal (0) | 2024.10.30 |
[Spring] 모니터링 환경 구성 (0) | 2024.10.12 |
[Spring] Actuator (0) | 2024.10.08 |