Template method Pattern

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

템플릿 메서드 패턴에 대한 정의는 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개의 댓글