본문 바로가기

Study/Design Pattern

[Pattern] Template Method Pattern

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