하드웨어 : 물리적인것, 오래되면 고장이 잘남
소프트웨어 : 물리적이지 않은것.
과거의 소프트웨어는 칩 하나에 프로그래밍
현재의 소프트웨어는 칩도 여럿 프로그램도 여럿.
점점 다양한 기능들과 복잡한 구조 > 하나의 기능은 묶어서 관리 로 진화
객체에 필요한 속성, 기능을 Class로 관리
Object : 단위, 개념
Class : 문법
Instance : 메모리에 할당된 객체/ 클래스
클래스는 플라토닉 월드(정신계)
인스턴스는 피지컬 월드(물질계)
라 보는게 편함
즉, 문법은 코드상에만 존재하는 것이므로 인스턴스로 현실세계인 Heap에 존재하는것으로 만들어줘야 함.
객체에 필요한 속성, 기능을 Class로 묶어서 관리
객체는 기능을 제공하는 역할 - 기능을 제공하기 위해 캡슐화 한다.
캡슐화를 하기 위해서는 추상화를 해야 한다.
클래스 : 자동차 라는 개념
오브젝트 : 소형차 중형차 등의 차량이라는 물건
추상화 : 디젤차, 가솔린차, 하이브리드, 전기, 수소차 등의 분류로 나누는것
상속(다형성)을 통해서 다양한 클래스를 만든다.
상속이란? 부모 와 자식관계에서 성립하는 것. 즉, 부모 클래스에서 자식 클래스로 속성 등을 상속하는것.
클래스간에 관계가 생긴다는 말!
SOLID
SRP : 단일책임원칙 IPay라는 인터페이스로 상속 느슨한 연결
OCP : 개방폐쇄원칙
LSP : 리스코프 치환 원칙. 서브(자식)타입은 기반(부모)타입으로 교체할 수 있어야 한다. (빨간펜 CM송 참고)
ISP : 인터페이스 분리원칙
DIP : 의존성 역전 원칙
객체지향 프로그래밍의 목적 : 의존성을 낮추고 결합도를 낮춘다. 객체의 자율성을 높이고 응집도를 높인다.
결합 의존도를 낮추는 방법 : 책임의 이동. 책임 = 응집도 라고 보면 됨.
응집도를 높이는 방법 :