Template method Pattern

아기코딩단2·2022년 1월 27일

템플릿 메서드 패턴에 대한 정의는 Template method defines the skeleton of an algorithm as an abstract class, allowing its subclasses to provide concrete behavior.으로 위키에서 찾아볼 수 있다. 해석하자면 알고리즘의 골격을 추상 클래스로 정의하여 하위 클래스가 구체적인 동작을 제공할 수 있도록 하는 것이다.

우선 수퍼클래스 즉 추상 클래스는 서브 클래스에게 구현된 멤버를 상속해준다.

abstract class Letter {
  String content;
  public void setContent(String content) {
    this.content = content;
  }

이후 수퍼클래스에서 기능이 어떻게 동작하는지 정의한다. 즉 템플릿의 역할을 하는 메서드를 수퍼 클래스에 둔다.

public void print() {
	this.printHeader();
  System.out.println(this.content);
  System.out.println();
  System.out.printf("      from %s \n", this.getSign());
}
public abstract void printHeader();
public abstract void printFooter();
public abstract void String getSign();
}

위와 같이 추상메서드를 만들어두고 세부사항은 서브클래스에게 구현을 맡긴다.

상세한 기능에 대한 구현은 서브클래스에서 오버라이딩한다.

class TaxBill extends Letter {

@Override
public void printHeader() {
  System.out.println("----------고지서입니다---------");
}

@Override
public String getSign() {
  return "한국전력공사";
}

@Override
public void printFooter() {
  System.out.println("-----------전력공사 드림----------");

 }
}
 public class PrintTemplate {
 public static void main(String[] args) {
   Letter1 letter = new Bill();
   letter.setContent("이번달 전기요금은 54,500원 입니다.");
   letter.print();
 }
}

위와 같은 코드를 실행했을 때
아래와 같은 결과가 나오게 된다.

Template method 패턴은 상속을 통한 기능의 확장에 중점을 둔 디자인 패턴이라고 할 수 있다.
그러나 추상클래스에 정의한 메서드가 많아지게 되면 기능이 꼬일 수 있다는 단점이 있다.

profile
레거시 학살자

0개의 댓글