JAVA OOP 이야기
1. 객체지향 프로그래밍
- JAVA : 객체지향 언어다!
- 객체지향 프로그래밍 : 프로그램을 객체로 구성하는 것.
- 등장 : 프로그램이 거대화 하면서 등장.
- 아이디어 : 어떻게 큰 프로그램을 만들 것인가? 효율적인가?
- 해결책 : 작게 나눠서 만들고 합쳐
- 프로그램의 동작을 객체들에게 나눠서 수행.
객체 (개념적인 용어)
기술적인 용어 : class, instance (헷갈리면 안된다.)
- 객체는 작은 기능을 수행한다.
- 객체와 객체는 서로 협력을 한다.
=> 일을 잘게 쪼개서 객체에게 위임하고, 서로 협력하게 만드는 것
- 객체를 서로 구분할 필요가 있다.
- type(형)으로 구분한다.
- 예시 : String str = "Hello World!";
- 타입 만들기 : class 만들기
import java.util.*;
class MyObject extends Object implements Runnable{
// 필드 영역
private int a = 0;
// 메소드 영역
public void run() {
a += 1;
}
}
2. 객체지향의 특성
특성은 크게 4가지의 특징이 있다.
(2학년 때 객지설에서 중간고사 1번 문제로 객체지향의 특성을 적으라고 했던.. 기억이 났다....)
- 캡슐화
- 완성도가 있다.
=> 객체는 기능을 수행하는 단위다. 스스로 완전함을 갖는다. - 정보가 은닉되어 있다.
=> 객체의 정보가 밖으로 전달되거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다. - 객체는 스스로 동작할 수 있는 환경을 갖고 있어야 한다.
외부에 의존하거나, 외부의 침략을 제한하여야 한다.
- 완성도가 있다.
- 상속
- 상위, 부모, super, 추상
- 하위, 자식, this, 구체
- 오해 : 공통된 기능을 여러 객체에게 전달하고 싶을 때, 상속을 쓴다.(x)
- 포유류 > 사람 > 남자 > 짱구
- 추상화
- 상속이랑 비슷하다. 위로 올라갈수록 추상화가 된다.
- 추상화된 객체 : 추상체
- 구체적인 객체 : 구상체
=> 추상체와 구상체는 상대적인 개념이다.
=> 객체간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 된다. - 의미적 추상체
- 상속이랑 비슷하다. 위로 올라갈수록 추상화가 된다.
- 다형성
- 같은 객체지만 누가 접근하느냐에 따라서 필터링된 기능만 제공
- 객체와 객체가 겹치면 안된다.
3. 객체지향 설계 : UML
(1) UML
- 객체지향 프로그래밍 : 기능을 객체에게 나눠서 수행시킨다.
=> 객체를 어떻게 구분했다. (일을 어떻게 분할했다.)
=> 객체간의 관계가 어떻게 구성되었다. (연관관계가 어떠하다.)
- 설명하기 위한 도구 : UML (주소 : https://www.draw.io/)
- Usecase Diagram
- Sequence Diagram
- Package Diagram
- Class Diagram
(2) 어떻게 하면 객체지향을 잘 할 수 있을까?
- 객체지향 설계를 하는 5가지 원칙
- S : SRP
단위 책임의 원칙, 하나의 임무만 줘라.
수정이 필요할 경우 수정되는 이유는 하나 때문이어야 한다. - O : OCP
수정에는 닫히고, 확장에는 열어라. - L : LSP
추상 객체로 사용되는 부분에 구상 객체가 들어가도 아무 문제가 없어야 한다. - I : ISP
인터페이스 분류의 원칙, 인터페이스 나눠서 써라. - D : DIP
- 디자인 패턴(GoF) - 23가지 패턴(주소 : https://refactoring.guru/)
객지설 좋아하는데 다시 배워서 너무 좋았다.
디자인 패턴을 따로 정리해둬야겠다.
'2023 활동 - 4학년 > [1월 ~ 4월] sw 아카데미 백엔드 과정' 카테고리의 다른 글
[2023.01.11 / CNU SW 아카데미] 프로그래머스 캠퍼스 강의 (0) | 2023.01.12 |
---|---|
[2023.01.11 / CNU SW 아카데미] 프로그래머스 라이브 클래스 (1) | 2023.01.11 |
[2023.01.10 / CNU SW 아카데미] 리눅스 특강1 (0) | 2023.01.10 |
[2023.01.09 / CNU SW 아카데미] 2주차 시작.. (0) | 2023.01.09 |
[2023.01.06 / CNU SW 아카데미] 한 주가 끝났다. (0) | 2023.01.06 |