디자인 패턴에서 가장 중요한 점은 "패턴 다이어그램"입니다.
패턴 다이어그램을 보면, 해당 디자인 패턴에 대해서 다 알 수 있다는 말이 있을 만큼 가장 중요합니다!
따라서 아래의 패턴 다이어그램을 보면서, 템플릿 메서드 패턴에 대해서 자세하게 살펴보겠습니다:)
☝️ 잠깐~! 다이어그램 상식
기울림꼴로 되어 있는 클래스와 메소드는 추상 클래스(abstract class), 추상 메소드를 의미합니다!
따라서 아래의 사진에서 Abstract Class, method1, method2, method3는 모두 추상 클래스와 추상 메소드이므로 해당 클래스를 상속받는 모든 클래스는 해당 메소드들을 구현해줘야 합니다.
💭 혹시 아래의 사진(Template Method 패턴 다이어그램)에서 특별한 점을 찾으셨나요??
🚨 바로!!! Abstract Class는 Concrete Class와 다르게 template Method를 가지고 있습니다.
즉, 템플릿 메소드는 부모(Abstract Class)에게만 있는데요!
해당 템플릿 메소드는 method1, method2, method3를 사용하여 동작을 정의했습니다.
public abstract class AbstractClass{
public abstract void method1();
public abstract void method2();
public abstract void method3();
public final void templateMethod(){
method1();
for(int i=0; i<3; i++){
method2();
}
method3();
}
}
따라서, 자식 클래스(Concrete Class)는 해당 final로 정의된 templateMethod의 동작의 흐름은 변경할 수 없고, 추상 메소드(method1, method2, method3)만을 구현할 수 있습니다.
즉, 템플릿 메소드 패턴은 수정은 제한되고 닫혀있는 구조라고 할 수 있습니다.
해당 패턴을 왜 사용하는 지를 알아야만, 적절한 상황에서 프로젝트에 패턴을 적용할 수 있습니다!
🤔 그러면, 과연 왜 Template Method 패턴을 사용하는 걸까요??
💡 바로바로!! 관심사를 분리하기 위해서입니다!!
AbstractClass는 알고리즘(동작의 흐름)에 집중할 수 있습니다.
그리고 반드시 동작하는 알고리즘과 최적의 흐름을 정의해야 합니다.
ConcreteClass는 동작의 흐름에는 신경쓰지 않고, 구현에 집중할 수 있습니다.
따라서 구현에 책임은 자식 클래스들에게 있습니다.
☝️ 여기서 잠깐~! 그러면 Template Method 패턴은 확장하는 구조에서 사용할 수 있을까요??
이러한 구조에서는 Template Method 패턴보다는 Strategy 패턴 사용하는 것이 적합하다고 합니다!!
Strategy 패턴은 추후에 다룰 예정입니다:)
이처럼 적절한 상황에 Template Method 패턴을 적용하여, 더 효율적인 개발을 할 수 있습니다!!
잘봤습니다. 좋은 글 감사합니다.