공통적으로 쓰고 있는 것을 끌어 올려 추상클래스로 만드는 것.
추상 클래스를 만들어서 공통적인 것들은 추상 클래스에서 처리하고 변하는 것만 추상 메서드로 그대로 남겨놓고 이를 구현하는 자녀 클래스에서 해당 추상메서드를 오버라이딩 해서 변하는 로직을 처리합니다.
템플릿( template)이란?
반복적인 작업을 간편하게 하기 위해 미리 정의된 틀이나 형식입니다
아래와 같이 Java선생님을 비롯해서 Spring선생님, Css선생님, DB선생님 등
수많은 선생님이 계신다고 한다면 수업하기 순서에 무언가 추가 된다거나
변경이 발생했을 때 모든 선생님의 코드를 하나하나 바꿔야 할 것이다.
public class JavaTeacher {
public void 수업하기() {
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
public void 입장하기() {
System.out.println("입장하기");
}
public void 출석부르기() {
System.out.println("출석부르기");
}
public void 강의하기() {
System.out.println("자바 강의하기");
}
public void 퇴장하기() {
System.out.println("퇴장하기");
}
}
public class App {
public static void main(String[] args) {
JavaTeacher jt = new JavaTeacher();
jt.수업하기();
}
}
선생님들의 공통 부분을 한 곳에서 처리한다면 변경이 발생했을 때 모든 선생님의 코드를
수정하지 않아도 될 것이다.
강의하기 메서드만 선생님에 따라 변하는 로직이고 나머지 부분은 공통적인 부분이므로
추상 클래스로 빼내서 처리한다.
public class JavaTeacher extends Teacher{
public void 강의하기() {
System.out.println("자바 강의하기");
}
}
//Teacher라는 추상 메서드를 만들어서 변하지 않는 공통적인 것을 모아서 끌어 올렸다.
//변하는 것은 abstract 메서드로 남겨놓고 하위 클래스에서 로직을 처리
public abstract class Teacher {
public void 수업하기() {
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
public void 입장하기() {
System.out.println("입장하기");
}
public void 출석부르기() {
System.out.println("출석부르기");
}
public abstract void 강의하기();
public void 퇴장하기() {
System.out.println("퇴장하기");
}
}
public class App {
public static void main(String[] args) {
JavaTeacher jt = new JavaTeacher();
jt.수업하기();
}
}
Share article