이전 포스트/TIL(Today I Learned)

2주차 - 프레임워크를 위한 Java(2)

병고라니 2023. 6. 6. 01:30

1. 객체지향 프로그래밍

  • 자바는 객체지향 언어이다.
  • 객체지향 언어란? 
    • 프로그램을 객체로 구성하는 것
    • 프로그램이 거대화 하면서 등장
  • 관련 용어
    • 개념적 용어: 객체
      • 객체와 객체는 서로 협력한다.
      • 즉 일을 잘게 쪼개서 객체에게 위임하고, 서로 협력하게 만든다.
      • 이러한 객체는 타입으로 서로 구분한다.
    • 기술적인 용어: class, instance

2. 객치쟈항의 특성

  1. 캡슐화
    • 기능을 수행하는 단위로써 완전함을 갖는다.
    • 객체의 정보가 밖에서 접근하거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다. 즉 객체는 스스로 동작할 수 있는 환경을 갖고 있어야 하며 외부에 의존하거나, 외부의 침략을 제한하여야 한다.
      • 접근 지정자
        • private: 객체 소유
        • protected: 상속된 객체에서도 접근 가능.
        • friendly: 같은 패키지 내에서 접근가능. (패키지 가시성)
        • public: 모두 다 접근 가능.
  2. 상속
    • 상위, 부모, super [추상]
    • 하위, 자식, (this), [구체]
    • 오해(이런 이유로 한면 안되는 것): 공통된 기능을 여러 객체에게 전달하고 싶을 때.
    • 원자 > 물질 > 생물 > 동물 > 포유류 > 사람 > 남자 > 짱구 
      • 부모와 자식 관계는 상대적인 개념이다.
  3. 추상화
    • 추상화된 객체: 추상체
    • 구체적인 객체: 구상체
    • 객체간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 한다. 
    // 의미적 추상체
    class Login {
        void login() {}
    }
    
    class KakaoLogin extends Login {
        void login() {}
    }
    //추상기능을 가진 객체
    abstract class Login {
    	abstract void login();
    }
    
    class KakaoLogin extends Login {
        void kakao() {}
        @Override void login() {}
    }
    // 객체 자체가 추상적
    interface Login {
        void login();
    }
    
    class KakaoLogin implements Login {
        void kakao() {}
        @Override void login() {}
    }
  4. 다형성
    • 형(type)을 여러가지로 표현할 수 있다.
    class KakaoLogin implements Login {
        void kakao() {}
        @Override void login() {}
    }
    
    interface Portal {
        void portal();
    }
    
    class NaverLogin implements Login, Portal {
        void naver() {}
        @Override void login() {}
        @Override void portal() {}
    }
    
    KakaoLogin k = new KakaoLogin();
    Login k = new KakaoLogin();
    Login login = new Login();
    Login login = new KakaoLogin();
    Login login = new NaverLogin();
    login.login();
    
    Portal portal = new NaverLogin();
    portal.portal();

3. 객체지향 설계

  1. UML
    • 객체지향 프로그래밍: 기능을 객체에게 나눠서 수행시킨다.
    • 설명하기 위한 도구: UML
      • Usecase Diagram
      • Sequence Diagram
      • Package Diagram
      • Class Diagram
    • Tool
      • https://draw.io
      • https://staruml.io/
      • PowerPoint / Visio
      • 그림판
  2. 어떻게 하면 객체를 잘 나누고 연관지을 수 있느냐?
    • 객체지향 설계하는 5가지 원칙
      1. S : SRP : 수정이 필요할 경우 수정되는 이유는 하나여야 한다.
      2. O : OCP : 수정에는 닫히고, 확장에는 열어야 한다.
      3. L : LSP : 추상객체로 사용되는 부분에 구상객체가 들어가도 아무 문제가 없어야 한다.
      4. I : ISP : 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다. 
      5. D : DIP : 고수준 모듈이 저수준 모듈에 의존하지 않고 추상화에 의존해야 한다.