Template Method Pattern

2024. 10. 14. 15:13·Programming/디자인 패턴

템플릿이란?

  • 템플릿 == 문자형 틀
  • 예를 들어, 색연필로 색칠할 때 색상은 바뀌어도 문자형은 유지되는 것처럼, 상위 클래스의 틀을 통해 기본적인 로직은 동일하게 유지

템플릿 메서드 패턴이란?

상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이다.

구성(추상 클래스 + 구현 클래스)

추상 클래스

  • 추상 클래스는 하위 클래스에서 구현할 것으로 기대하는 추상 메서드와 로직의 뼈대가 되는 템플릿 메서드로 구성된다.
  • 템플릿 메서드는 구체적인 로직의 순서를 정의한 일반 메서드로, 추상 메서드의 조합을 통해 알고리즘을 구성한다.
  • 템플릿 메서드 == 알고리즘
Public abstract class AbstractDisplay {
// 추상화 메서드(== 뼈대)
     public abstract void open();
     public abstract void print();
     public abstract void close();
 // 템플릿 메서드(== 알고리즘, 로직)
     public final void display()  {
            open();
            for (int i = 0; i < 5; i++)  {

                  print();
            }
             close();
 }

 

구현 클래스

하위 클래스들은 추상 클래스에서 정의한 추상 메서드를 구현하여, 템플릿 메서드가 수행하는 로직의 세부 사항을 결정한다.

public class CharDisplay extends AbstractDisplay  {
private char ch;
public CharDisplay (char ch)  {
         this.ch = ch;
}
public void open()  {
    System.out.print("<<");
}
public void print()   {
      System.out.print(ch);
}
public void close()  {
   System.out.print(">>");
}
}

장점은?

  • 로직을 공통화 할 수 있다!
  • 추상 메서드의 구현은 하위 클래스에 따라 달라지지만, 템플릿 메서드는 동일한 로직을 유지한다.
  • 따라서 하위 클래스는 세부 구현만 담당하고, 알고리즘의 흐름을 일일이 정의할 필요가 없다.

'Programming > 디자인 패턴' 카테고리의 다른 글

데코레이터 패턴(Decorator Pattern)  (0) 2021.12.18
컴포지트 패턴(Composition Pattern)  (0) 2021.12.14
커맨드 패턴  (0) 2021.12.12
프록시 패턴  (0) 2021.12.11
'Programming/디자인 패턴' 카테고리의 다른 글
  • 데코레이터 패턴(Decorator Pattern)
  • 컴포지트 패턴(Composition Pattern)
  • 커맨드 패턴
  • 프록시 패턴
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    socar
    Process
    Generic
    BFS
    RR
    Thread
    minimum number of arrows to burst balloons
    @JsonNaming
    준영속 엔티티
    fcfs
    Oauth2
    OS
    @JsonProperty
    Reorder List
    wildcards
    트랜잭션
    rotting oranges
    pacific atlantic water flow
    추상화 클래스
    운영체제
    runner 기법
    JSCode
    algorithm
    AuthenticationSuccessHandler
    lower bounded wildcards
    디자인 패턴
    LinkedList
    제네릭
    clone graph
    Climbing Stairs
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
Template Method Pattern
상단으로

티스토리툴바