[디자인패턴] 6. 템플릿 메소드 패턴

silver's avatar
Nov 13, 2024
[디자인패턴] 6. 템플릿 메소드 패턴
 
  • 상위 클래스에서 알고리즘의 골격을 정의, 하위 클래스에서 세부 단계의 구체적인 구현을 맡도록 하는 구조
  • 공통의 작업 순서가 있지만, 세부 단계는 상황에 따라 달라져야 할 때 유용하게 사용 - 재사용성에 좋음
 

1. 템플릿 메소드 패턴 이해 코드

 
Interface
interface를 상속받는 클래스에서 무조건적으로 실행해야함.
public interface TeacherAble { public abstract void 수업하기(); }
상위 클래스
TeacherAble라는 interface를 implements해 수업하기라는 메소드를 실행하게 함.
하위클래스에서 다중 상속이 불가능하므로 interface와 조합해서 사용가능!
public abstract class Teacher implements TeacherAble { // 공통 메소드 : 동일하게 적용 protected void 입장하기() {System.out.println("입장하기");} protected void 출석부르기() {System.out.println("출석부르기");} protected void 퇴장하기() {System.out.println("퇴장하기");} // 추상메소드 : 하위 클래스에서 구체적인 수업과목을 구현 protected abstract void 강의하기(); // 템플릿 메소드 : 수업 알고리즘의 흐름을 정리 -순서 고정 public void 수업하기(){ // 캡슐화로 코드의 안정성 확보 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); };
 
하위 클래스
public class FlutterTeacher extends Teacher{ // 템플릿 메소드를 사용하지 않았을 때 번거롭게 모든 클래스에서 아래처럼 적어야함 // @Override // public void 수업하기() { // 입장하기(); // 출석부르기(); // 강의하기(); // 퇴장하기(); // } @Override protected void 강의하기() { System.out.println("플러터 강의하기"); } }
public class JavaTeacher extends Teacher { @Override protected void 강의하기() { } public class PythonTeacher extends Teacher { @Override protected void 강의하기() { } public class HTMLTeacher extends Teacher { @Override protected void 강의하기() { } public class FlutterTeacher extends Teacher { @Override protected void 강의하기() { }
App
import ch05.teacher.FlutterTeacher; import ch05.teacher.HtmlTeacher; import ch05.teacher.JavaTeacher; import ch05.teacher.PythonTeacher; public class App { public static void main(String[] args) { JavaTeacher jt = new JavaTeacher(); jt.수업하기(); PythonTeacher pt = new PythonTeacher(); pt.수업하기(); HtmlTeacher ht = new HtmlTeacher(); ht.수업하기(); FlutterTeacher ft = new FlutterTeacher(); ft.수업하기(); } }
 
결과
입장하기 출석부르기 자바 강의하기 퇴장하기 입장하기 출석부르기 파이썬 강의하기 퇴장하기 입장하기 출석부르기 HTML 강의하기 퇴장하기 입장하기 출석부르기 플러터 강의하기 퇴장하기
 
 
Share article

silver