Template Method Pattern
- 로직을 단계 별로 나눠야 하는 상황에서 적용한다.
- 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있을 경우 더 효율적이다.
- 즉, 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.
- 특정 단계들을 다시 정의할 수 있게 해 준다.
<br>
조건
- 클래스는 abstract로 만든다.
- 단계를 진행하는 메소드는 수정이 불가능하도록 final 키워드를 추가한다.
- 각 단계들은 외부는 막고, 자식들만 활용할 수 있도록 protected로 선언한다.
<br>
예를 들어 A,B,C의 로직이 순서대로 실행되어야 하는 단계로 이루어져 있고 이 단계가 항상 유지되며 순서가 바뀔 일이 없다고 가정해 보았을 때, A,와 C는 변할 일이 없고 설계에 따라 B만 변한다고 해보면 아래와 같이 구현하면 된다.
abstract class Program{
protected void A(){ System.out.println("A"); }
abstract void B(){}
protected void C(){ Ststem.out.println("C");}
final void runProgram(){ // 상속 받은 클래스에서는 수정할 수 없다. 단계가 고정됨.
this.A();
this.B();
this.C();
}
}
<br>
class otherProgram extends Program{
@Override
void B(){ // 기능에 따라 B메서드를 오버라이드하여 사용한다.
System.out.print("implememted logic");
}
}
<br>
abstract와 interface의 차이는?
- abstract : 부모의 기능을 자식에서 확장시켜나가고 싶을 때 사용, **다중 상속이 안되므로 상황에 맞게 사용.**
- interface : 해당 클래스가 가진 함수의 기능을 활용하고 싶을 때 사용
<br>
'Study > Design Pattern' 카테고리의 다른 글
[Pattern] Factory Method Pattern (0) | 2022.01.15 |
---|---|
[Pattern] Singleton Pattern (0) | 2022.01.15 |
[Pattern] Adapter Pattern (0) | 2022.01.15 |
[Pattern] 디자인 패턴 개요 (0) | 2022.01.15 |
[WEB] MVC패턴 (0) | 2021.10.14 |