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

gov's avatar
Nov 13, 2024
[디자인패턴]템플릿 메서드
💡
Template Method Pattern 알고리즘 구조는 상위 클래스, 세부 구현은 하위 클래스에 정의하는 패턴
  • 리팩터링(Refactoring): 기존 코드 구조를 개선하는 과정
package ch05; 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 t1 = new JavaTeacher(); t1.수업하기(); PythonTeacher t2 = new PythonTeacher(); t2.수업하기(); HTMLTeacher t3 = new HTMLTeacher(); t3.수업하기(); FlutterTeacher t4 = new FlutterTeacher(); t4.수업하기(); } }
package ch05.teacher; // abstract 추상 클래스 - 부모가 정의할 수 없는 걸 자식이 무조건 구현 // implements 구현 - 쿨래스 구현 시, 정의한 모든 메서드 오버라이드함 / 자식만 동작? // TeacherAble을 구현하는 추상 클래스 Teacher // 모든 Teacher가 동일하게 수행하는 행동 지정하는 클래스 public abstract class Teacher implements TeacherAble { // protected 생성자 // 1. 템플릿 메서드를 정의하는 부모 클래스 객체 생성 방지 // 2. 자식 클래스가 부모 메서드를 받아 사용(상속관계) protected void 입장하기() {System.out.println("입장하기");} protected void 출석부르기() {System.out.println("출석부르기");} // 부모 클래스 선언, 자식 클래스 구현 하도록 강제 설정 // Teacher마다 행동을 다르게 적용 가능 protected abstract void 강의하기(); protected void 퇴장하기() {System.out.println("퇴장하기");} // 템플릿 메서드 패턴 : extends Teacher을 자식 클래스 적용 // 외부에서 큰 흐름만 알고 세부 사항은 캡슐화되어 보이지 않는다 // 템플릿 메서드 패턴의 캡슐화 원칙 - 공통된 행동 순서 public void 수업하기() { 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); } }
package ch05.teacher; // interface - 특정 기능만 노출시키고 나머지 숨기기 // 수업하기() 기능만 외부에 노출 시킴 public interface TeacherAble { public abstract void 수업하기(); // public 자동 생략 가능 }
package ch05.teacher; public class PythonTeacher extends Teacher { protected void 강의하기() { System.out.println("파이썬 강의하기"); } } package ch05.teacher; // 요구사항 > 동작하기(인스턴스) /App.java에서 작동 public class JavaTeacher extends Teacher{ protected void 강의하기() { System.out.println("자바 강의하기"); } } package ch05.teacher; public class HTMLTeacher extends Teacher{ protected void 강의하기() { System.out.println("HTML 강의하기"); } } package ch05.teacher; public class FlutterTeacher extends Teacher{ protected void 강의하기() { System.out.println("플러터 강의하기"); } }
Share article

goho