본문 바로가기
🎨 디자인 패턴

템플릿 메서드 패턴

by 시마이 2024. 5. 18.

 

템플릿. [ 자주 사용되는 그림, 패턴 등을 미리 만들어 놓아서 다음에 사용할 때 이것을 이용하는 것. ]

 

 


🗣 템플릿 메서드 패턴

여러 클래스에서 반복되는 로직이지만, 로직의 일부분만 클래스별로 다르게 처리해야 할 때 사용하는 디자인 패턴.

 

 

 

📚 미리 알고 있어야 하는 내용

  • 추상클래스
  • 다형성
  • 상속
  • 오버라이딩

 

 

 

🏗 템플릿 메서드 패턴 구조

 

 

 

 

🏭 템플릿 메서드 구현

템플릿 메서드는 추상클래스를 사용한다.

먼저 일부만 다르게 처리할 것은 추상메서드로 선언한다.

그리고 반복되는 로직은 일반메서드로 구현한다.

마지막으로 일반 메서드의 내부에서 추상메서드를 호출한다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public abstract class AbstractTemplate {
    
    // 반복되는 로직을 구현한 메서드
    public void execute() {
		
        long startTime = System.currentTimeMillis();
		
        // 로직의 중간에서 호출된 추상 메서드
        call();
		        
        long endTime = System.currentTimeMillis();
        long resultTime = endTime - startTime;
        log.info("resultTime={}", resultTime);
    }
    
    // 일부만 다르게 처리하는 추상 메서드
    protected abstract void call();
 }

 

 

 

🚂 템플릿 메서드 사용

먼저 구현된 템플릿 메서드 클래스를 상속받은 자식 클래스를 생성한다.

그리고 자식 클래스에서는 추상메서드를 구현한다.

마지막으로 부모클래스인 플릿 메서드 클래스의 일반메서드를 호출한다.

아래의 예제에서는 익명의 내부 클래스를 이용하여 별도의 자식 클래스를 만들지 않고 사용했다.
@Test
void templateMethodTest() {
    
    // 익명 내부 클래스 사용
    AbstractTemplate template1 = new AbstractTemplate() {
        
        // 추상 메서드 구현
        @Override
        protected void call() {
            log.info("비즈니스 로직1 실행");
        }
    };
    
    // 반복되는 로직 실행
    template1.execute();
    
    // 실행 결과
    // 비즈니스 로직1 실행
    // resultTime=3
}

 

 

 

👍 템플릿 메서드 장점

여러 클래스에서 사용되는 반복되는 로직을 메서드로 만들었기 때문에 변경이 발생하는 경우 해당 메서드만 변경하면 된다.

만약 클래스에서 반복되는 로직을 각각 구현했다면 변경이 발생하는 경우 모든 클래스를 수정해야 한다.

 

 

 

👎 템플릿 메서드 단점

템플릿 메서드 클래스를 상속해서 사용해야 한다.

그래서 새로운 클래스를 새로 만들던지 익명의 내부 클래스를 만들어야 한다.

또한 상속으로 발생하는 강한 의존성으로 부모 클래스의 변경이 자식클래스에 영향을 줄 수 있다.

 

 

 


 

스프링 핵심 원리 - 고급편 | 김영한 - 인프런

김영한 | 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기

www.inflearn.com