객체지향 프로그래밍 (OOP)
- 등장 배경: 프로그램이 점차 거대해지면서 등장!
- 프로그램의 동작을 객체 단위로 작게 나누고 합쳐서 하나의 프로그램을 구성하자.
- 객체 간 협력 관계에 주목 🤩
객체지향의 특성
- 캡슐화
- 기능을 수행하는 최소 단위
- 정보의 은닉 (접근 지정자)
- 상속
- 추상 : 상위, 부모, super, 일반화
- 구체 : 하위, 자식, (this), 구체화
- 공통된 기능을 여러 객체에게 전달하고 싶을 때 (일반화)할 때 오류에 빠지지 않도록 조심
- 객체 간 관계와 의미를 잘 파악할 필요가 있음!
- 추상화
- 추상 객체 ↔ 구체 객체(구현체) (= 부모 ↔ 자식 = 상위 ↔ 하위 = 일반화 ↔ 구체화)
- 의미적 추상체 / 추상 기능을 가진 객체(abstract) / 객체 자체가 추상적 (interface)
- 다형성
- 추상 - 구체 클래스 간 형(Type)을 여러 가지로 표현할 수 있다.
interface Login { void login() {} } class KakaoLogin implements Login { void kakao() {} @override void login() {} } KakaoLogin k = new KakaoLogin(); Login l = new KakaoLogin(); // Login 인터페이스는 kakao()를 찾을 수 없기 때문에 l.kakao()는 맞지 않음
객체지향 설계
- 객체를 어떻게 구분했는지 / 객체 간 연관 관계가 어떠한 지에 주목
- UML
- 설명하기 위한 도구
- Usecase
- Sequence
- Package
- Class
- Tool
- draw.io
- staruml.io
- PointPoint / Visio / 그림판 / …
- 설명하기 위한 도구
- 어떻게 하면 객체를 잘 나누고 연관 지을 수 있을까?
- 객체지향 설계의 5가지 원칙 (SOLID)
- 디자인 패턴
- 원칙에 따라 설계했을 때 보인 여러 상황에서의 공통점
- 23가지 패턴 (참고자료)
'개발 > Java' 카테고리의 다른 글
[SOLID] 객체 지향 설계의 5가지 원칙 (0) | 2023.07.04 |
---|---|
[Java] Functional Interface와 익명 클래스 (0) | 2022.10.19 |
[Java] Default Method (0) | 2022.10.19 |
[Java] JVM? JRE? JDK? (0) | 2022.10.18 |
[Java] String, StringBuilder, StringBuffer (0) | 2022.10.18 |