Develop/Design

[Design Pattern] Template Method Pattern

코딩의성지 2022. 1. 12. 18:15

오늘은 간단하게 Template Method Pattern 에 대해 정리해두려 한다.
템플릿 메서드 패턴은 Spring Framework 같은 프레임워크 환경에서 자주 활용되는 패턴이고, 실무코드에서도 중복인 코드를 줄이기 위해 자주 사용되는 패턴이니 잘 정리해두면 좋다.

Template Method Pattern이란 ?


템플린 메서드 패턴은 알고리즘의 구조를 상위클래스의 메서드에 정의하고 하위클래스에서 자신에 맞게 세부 알고리즘을 정의하도록하는 패턴이다.
구현하려하는 알고리즘에 일정한 단계가 있을 것이고 , 세부적인 단계들 중에 조금씩 구현내용이 다른 경우 사용하면 된다.

작성 방법은 다음과 같다.
알고리즘의 여러단계를 각 메서드로 선언하고, 그 알고리즘을 수행할 템플릿 메서드를 만들어준다. 하위 클래서에서는 나눠진 메서드 (세부적인 단계)를 구현해 준다.

예시

 

위의 클래스 다이어그램 예시를 보면 이해가 잘 될 것이라 생각한다. 예시는 책 클린코드를 참고하여 가져왔다.
클래스는 나라별 휴가 정책을 정하는 클래스인데, 다른것은 다 똑같다 하더라도 휴가 법정 최소 일수는 나라마다 다를 것이다. 그렇기에 법정 최소 일수를 구하는 세부 알고리즘만 따로 빼서 구현한다.

코드를 통해 조금더 살펴보자.

abstract public class VacationPolicy {

	public void accrueVacation() { 
    	calculateBaseVactionHours(); 
        alterForLegalMinimums(); 
        applyToPayroll(); 
    } 
    
    // 지금까지 근무한 시간을 바탕으로 휴가 일수를 계산하는 메서드 
    private void calculateBaseVacationHours() { /* ...*/ };
    
    // 휴가 일수가 최소 법정일수를 만족하는지 확인하는 메서드 
    abstract protected void alterForLegalMinmums() { /* ...*/ }; 
    
    // 휴가 일수를 급여 대장에 적용하는 메서드 
    private void aplyToPayroll() { /* ...*/ }; 
}

위의 코드를 보면 공통된 알고리즘을 accrueVacation 이라는 템플릿 메서드에 담고,
세부적인 내용 중 동일한 내용에 대해서는 메서드로 구현을 해주고, 다른 내용이 있는 것은 하위클래스가 구현하도록 abstract 메서드로 만들어 줬다.

실제 구현을 해보면 아래와 같이 구현이 될 것이다.

public class USVacationPolicy extends VacationPolicy {
	
    @Override 
    protected void alterForLegalMinimums() { 
    	// US 의 법정 최수 일수 계산 로직 
    } 
} 

public class EUVacationPolicy extends VacationPolicy { 
	
    @Override 
    protected void alterForLegalMinimums() { 
    	// EU 의 법정 최수 일수 계산 로직 
    } 
}

하위클래스에서는 각각의 알고리즘을 이렇게 구현해주면 된다.

소스코드를 보면서 공부하면 이해가 어렵지 않을 것이니, 잘 숙지해서 템플릿 메서드 패턴을 잘 활용해보길 바란다.

 


Ref.
로버트 C.마틴, 『클린코드』, 도서출판인사이트(2021), p219~220

반응형