inblog logo
|
code-sudal
    design pattern

    캡슐화

    윤주헌'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

    RSS·Powered by Inblog