이전 포스트/TIL(Today I Learned)
2주차 - 프레임워크를 위한 Java(2)
병고라니
2023. 6. 6. 01:30
1. 객체지향 프로그래밍
- 자바는 객체지향 언어이다.
- 객체지향 언어란?
- 프로그램을 객체로 구성하는 것
- 프로그램이 거대화 하면서 등장
- 관련 용어
- 개념적 용어: 객체
- 객체와 객체는 서로 협력한다.
- 즉 일을 잘게 쪼개서 객체에게 위임하고, 서로 협력하게 만든다.
- 이러한 객체는 타입으로 서로 구분한다.
- 기술적인 용어: class, instance
- 개념적 용어: 객체
2. 객치쟈항의 특성
- 캡슐화
- 기능을 수행하는 단위로써 완전함을 갖는다.
- 객체의 정보가 밖에서 접근하거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다. 즉 객체는 스스로 동작할 수 있는 환경을 갖고 있어야 하며 외부에 의존하거나, 외부의 침략을 제한하여야 한다.
- 접근 지정자
- private: 객체 소유
- protected: 상속된 객체에서도 접근 가능.
- friendly: 같은 패키지 내에서 접근가능. (패키지 가시성)
- public: 모두 다 접근 가능.
- 접근 지정자
- 상속
- 상위, 부모, super [추상]
- 하위, 자식, (this), [구체]
- 오해(이런 이유로 한면 안되는 것): 공통된 기능을 여러 객체에게 전달하고 싶을 때.
- 원자 > 물질 > 생물 > 동물 > 포유류 > 사람 > 남자 > 짱구
- 부모와 자식 관계는 상대적인 개념이다.
- 추상화
- 추상화된 객체: 추상체
- 구체적인 객체: 구상체
- 객체간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 한다.
// 의미적 추상체 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() {} }
- 다형성
- 형(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. 객체지향 설계
- UML
- 객체지향 프로그래밍: 기능을 객체에게 나눠서 수행시킨다.
- 설명하기 위한 도구: UML
- Usecase Diagram
- Sequence Diagram
- Package Diagram
- Class Diagram
- Tool
- https://draw.io
- https://staruml.io/
- PowerPoint / Visio
- 그림판
- 어떻게 하면 객체를 잘 나누고 연관지을 수 있느냐?
- 객체지향 설계하는 5가지 원칙
- S : SRP : 수정이 필요할 경우 수정되는 이유는 하나여야 한다.
- O : OCP : 수정에는 닫히고, 확장에는 열어야 한다.
- L : LSP : 추상객체로 사용되는 부분에 구상객체가 들어가도 아무 문제가 없어야 한다.
- I : ISP : 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
- D : DIP : 고수준 모듈이 저수준 모듈에 의존하지 않고 추상화에 의존해야 한다.
- 객체지향 설계하는 5가지 원칙