Contents
1. 템플릿 메소드 패턴 이해 코드- 상위 클래스에서 알고리즘의 골격을 정의, 하위 클래스에서 세부 단계의 구체적인 구현을 맡도록 하는 구조
- 공통의 작업 순서가 있지만, 세부 단계는 상황에 따라 달라져야 할 때 유용하게 사용 - 재사용성에 좋음
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