[디자인패턴]5.템플릿메서드패

송송승현's avatar
Nov 13, 2024
[디자인패턴]5.템플릿메서드패
 

정의

💡
알고리즘의 구조를 정의하고, 하위 클래스에서 알고리즘의 특정 단계를 구현하도록 하는 행위 디자인 패턴.
코드의 재사용성과 확장성을 높이는 데 유용
상위 클래스에서 알고리즘의 뼈대를 제공하고, 하위 클래스에서 세부적인 구현을 제공

예제

public interface TeacherAble { void 수업하기(); } public abstract class Teacher implements TeacherAble { @Override public void 수업하기() { 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); } protected void 입장하기(){ System.out.println("입장하기"); } protected void 출석부르기(){ System.out.println("출석부르기"); } protected abstract void 강의하기(); protected void 퇴장하기(){ System.out.println("퇴장하기"); } } public class JavaTeacher extends Teacher{ @Override protected void 강의하기() { System.out.println("자바 강의하기"); } } public class PythonTeacher extends Teacher{ @Override protected void 강의하기() { System.out.println("파이썬 강의하기"); } } public class HtmlTeacher extends Teacher { @Override protected void 강의하기(){ System.out.println("HTML강의하기"); } } public class App { public static void main(String[] args) { JavaTeacher t1 = new JavaTeacher(); t1.수업하기(); PythonTeacher t2 = new PythonTeacher(); t2.수업하기(); HtmlTeacher t3 = new HtmlTeacher(); t3.수업하기(); } }
 

구성

  • 추상 클래스: 알고리즘의 구조를 정의하고, 템플릿 메서드를 제공
  • 추상 메서드: 하위 클래스에서 구현해야 할 메서드들
  • 구현 클래스: 추상 메서드를 구현하여 알고리즘의 구체적인 단계를 정의
 

장점

  • 코드 재사용성 : 공통적인 부분을 상위 클래스에 정의하고, 각 단계의 구체적인 구현은 하위 클래스에서 제공하여 코드의 중복을 줄이고 유지보수성이 높아짐
  • 유연성 : 알고리즘의 골격을 변경하지 않고, 하위 클래스에서 세부 구현을 변경할 수 있으므로 유연성을 제공. 이는 코드를 확장하거나 수정할 때 용이
  • 캡슐화 : 알고리즘의 공통적인 부분은 상위 클래스에서 캡슐화하고, 변경 가능한 부분은 하위 클래스에서 캡슐화. 이는 구현 세부 사항을 숨기고, 클라이언트 코드의 단순성을 유지하는 데 도움
  • 작업 분리: 상위 클래스에서 알고리즘의 큰 틀을 정의하고, 하위 클래스에서 세부 사항을 구현함으로써 작업 분리 가능.

단점

  • 복잡성 증가 : 상속을 이용 → 클래스 계층 구조가 깊어짐, 코드의 복잡성 증가
  • 유연성 제한 : 알고리즘의 틀이 상위 클래스에 고정되어 있으므로, 큰 틀을 변경해야 할 경우 상위 클래스를 수정해야 함. 하위 클래스에 대한 영향력 증대로 이어짐
  • 의존성 증가 : 하위 클래스는 상위 클래스의 구현에 의존적 형태, 상위 클래스의 변경이 하위 클래스에 영향
  • 기본 구현의 필요성 : 상위 클래스에서 모든 메서드에 기본 구현을 제공해야 할 경우, 이는 불필요한 코드가 증가할 수 있음. 특정 하위 클래스에서만 필요한 경우에도 기본 구현을 제공해야 한다면 이는 코드의 효율성 없어질 수 있음
 
Share article

송승현의 블로그