캡슐화

윤주헌's avatar
Aug 14, 2024
캡슐화
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

code-sudal