Contents
1. 예시1. 예시
1.1 초기
처음에 자바를 가르치는 선생님이 1명 있다 하자
그러면 코드를
package ex05.teacher;
public class JavaTeacher extends Teacher {
//원래는 상태가 있어야 하는대 행위만 가지고 해볼게요..
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public void 강의하기(){
System.out.println("자바강의하기");
}
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
package ex05;
import ex05.teacher.JavaTeacher;
public class App {
public static void main(String[] args) {
JavaTeacher jt = new JavaTeacher();
jt.입장하기();
jt.출석부르기();
jt.자바강의하기();
jt.퇴장하기();
}
}
이렇게 만들 수 있다
1.2 새로운 교사 등장
파이썬과 Html을 가르치는 선생님이 추가되었다.
package ex05.teacher;
public class HtmlTeacher extends Teacher {
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public void 강의하기(){
System.out.println("HTML강의하기");
}
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
, 파이썬 선생님
package ex05;
import ex05.teacher.HtmlTeacher;
import ex05.teacher.JavaTeacher;
import ex05.teacher.PythonTeacher;
import ex05.teacher.SpringTeacher;
public class App {
public static void main(String[] args) {
JavaTeacher jt = new JavaTeacher();
jt.입장하기();
jt.출석부르기();
jt.자바강의하기();
jt.퇴장하기();
PythonTeacher pt = new PythonTeacher();
pt.입장하기();
pt.출석부르기();
pt.파이썬강의하기();
pt.퇴장하기();
HtmlTeacher ht = new HtmlTeacher();
ht.입장하기();
ht.출석부르기();
ht.html강의하기();
ht.퇴장하기();
}
}
1.3 하나 하나 적기 귀찮다 → 캡슐화
또 귀찮아진다 → 자바 강의하기 같이 선생이 많으면 하나 하나 바꿔야 하기 때문에
수업하기로 묶어 버리고
public void 수업하기(){
입장하기();
출석부르기();
자바강의하기();
퇴장하기();
}
이것만으로 가능하다. 만들다 보면 귀찮아 질 때 만들어진다. 처음부터 생각하고 구상하지는 않는다.
JavaTeacher jt = new JavaTeacher();
jt.수업하기();
쓰는 사람이 편하다
2 번외
만약 신입이 와서 스프링 티쳐를 만들라 하면 자신이 필요 없다 생각한 것을 제외하고 만들 수 있다.
package ex05.teacher;
//SpringTeacher로 안하고 소문자 넣음..
public class Springteacher {
public void 수업(){
입장();
출석();
강의();
퇴장();
}
public void 입장(){
System.out.println("입장하기");
}
public void 출석(){
System.out.println("출석하기");
}
public void 강의(){
System.out.println("강의하기");
}
public void 퇴장(){
System.out.println("퇴장하기");
}
}
Springteacher st = new Springteacher();
st.수업();
그래서 바꿔달라고 함
또 다른 신입이 들어와서 똑같이 변경하면 바꿔달라 하기 말하기 귀찮아서 강제성을 넣는다
그리고 구체적인 것들 중 공통된 것을 묶는다.
1.4 이거는 템플릿 메서드를 통해 알아보자
페이지 넘어가기가 불가능해서 찾아보시길…
그래서 teacher 추상 클래스 만들었다.
package ex05.teacher;
public abstract class Teacher {
public abstract void 수업하기();
public abstract void 입장하기();
public abstract void 출석하기();
public abstract void 강의하기();
public abstract void 퇴장하기();
}
이 친구를 상속해서 만들어라
근데 강의하기 빼고 수업, 입장, 출석, 퇴장은 모든 선생님들이 사용한다
그래서
package ex05.teacher;
public abstract class Teacher {
public void 수업하기(){
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public abstract void 강의하기();
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
이것이 탬플릿 메서드 패턴이다
Share article