자바 디자인 패턴
3. Template Method - 하위 클레스에서 구체적으로 처리한다
조요피
2023. 10. 6. 08:38
3. Template Method - 하위 클레스에서 구체적으로 처리한다
템플릿이란?
문자 모양대로 구멍이 난 얇은 플라스틱 판.
펜으로 그 구멍을 따라 그리면 손으로도 반듯하게 글씨를 쓸 수 있다.
펜에 따라서 색상이나 모양은 조금씩 달라질 수 있지만 문자는 같다.
템플릿 메소드 패턴이란?
상위 클래스에 템플릿이 될 추상 메소드가 정의되어 있다.
추상 메소드 자체로는 어떻게 동작하는 지 알 수 없다. (하지만 input과 output은 알 수 있음)
상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적 내용을 결정하는 디자인 패턴
예제 코드
Template Method 패턴은 객체 지향 디자인 패턴 중 하나로, 행위 패턴(behavioral pattern) 중 하나입니다. 이 패턴은 알고리즘의 구조를 정의하면서 일부 단계를 서브클래스로 위임하여
알고리즘의 일부를 변경할 수 있게 하는 것을 목적으로 합니다. 주로 알고리즘의 골격(스켈레톤)을 정의하고, 구체적인 구현은 서브클래스에게 맡기는 방식으로 동작합니다.
Java에서 Template Method 패턴은 다음과 같이 구현됩니다:
- AbstractClass (추상 클래스): Template Method 패턴의 핵심이며 알고리즘의 골격을 정의합니다. 이 클래스는 템플릿 메서드를 가지고 있고, 이 메서드 안에서 알고리즘의 일련의 단계를
정의합니다. 일부 단계는 추상 메서드로 선언되어 있어 구체적인 구현은 서브클래스에서 제공해야 합니다.
public abstract class AbstractClass {
public final void templateMethod() {
// 알고리즘의 단계 1
step1();
// 알고리즘의 단계 2
step2();
// 알고리즘의 단계 3
step3();
}
protected abstract void step1();
protected abstract void step2();
protected abstract void step3();
}
- ConcreteClass (구체 클래스): AbstractClass를 상속받아 추상 메서드를 구체적으로 구현합니다. 이 클래스에서는 템플릿 메서드의 구체적인 동작을 정의합니다.
public class ConcreteClass extends AbstractClass {
@Override
protected void step1() {
// 구체 클래스에서 step1 구현
}
@Override
protected void step2() {
// 구체 클래스에서 step2 구현
}
@Override
protected void step3() {
// 구체 클래스에서 step3 구현
}
}
Template Method 패턴을 사용하면 알고리즘의 구조를 유지하면서 서브클래스에서 일부 단계를 수정하거나 확장할 수 있습니다. 이 패턴은 코드 재사용과 유지보수를 용이하게 만들어주며, 다양한 유형의 알고리즘을
쉽게 확장할 수 있는 장점이 있습니다.
템플릿 메소드의 장점
상위 클래스에 알고리즘이 정의되어 있으므로 하위 클래스는 알고리즘을 신경쓰지 않아도 된다.
이미 전체적인 흐름(로직)은 정해져 있고 하위 클래스는 세부 사항(추상 메소드)을 구현하기만 하면 된다.
하위 클래스의 관점
- 상위 클래스에서 정의된 메소드를 사용할 수 있다
- 추상 메소드를 구현하는 것만으로 상위 클래스의 메소드를 사용할 수 있다
- 메소드를 오버라이딩 하여 사용할 수 있다
상위 클래스 관점
- 하위 클래스에서 추상 메소드를 구현하기를 기대한다
- 하위 클래스에 추상 메소드 구현을 요청한다