###### tags: `2020 Boostcamp`
# Day05-학습정리
### 스스로 확인할 사항
- **`클래스`와 `오브젝트`, `인스턴스`에 대한 정의를 찾아보고, 자신이 이해한 내용을 자기만의 표현으로 정리한다.**
- 클래스
- 객체를 만들기 위한 설계도
- 프로퍼티와 메서드들을 정의한다
- 오브젝트
- 소프트웨어 세계 상에 구현할 대상
- 인스턴스
- 소프트웨어 세계 상에 구현된 실체
- **객체지향 프로그래밍의 특징 중에서 상속과 다형성에 대해 학습하고 정리한다.**
- 상속
- 기존의 클래스를 토대로 새로운 클래스를 만드는 방법
- 하위 클래스에서 상위 클래스의 맴버를 물려 받는다
- 다형성
- 여러가지 형태를 가지게 하는 능력
- 코드의 재사용성이 증대됨
- 서로 다른 객체가 동일한 메시지에 대해 다른 방법으로 응답할 수 있다
- **Class 와 Prototype 에 대한 공통점과 차이점을 학습하고 정리한다.**
- 둘다 객체를 생성할 수 있는 프레임워크 기능을 한다
- 프로토타입은 기존의 객체를 복사해서 새로운 객체를 생성한다
- 프로토타입과 객체 생성자를 연결해 줘야 한다
- **this(또는 self)와 super 키워드 차이점에 대해 정리한다.**
- super: 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수
- this: 자신의 필드나 메소드를 참조할 때 사용하는 참조 변수
- ex) 두 필드의 이름이 같은 경우, super와 this로 구별 가능하다
### 다같이 확인할 사항
- **객체 인스턴스 비교하는 다양한 방법과 효율성에 대해 정리하고 비교한다.**
> 1. Referential Equality: 객체 인스턴스가 같은 메모리공간에 있는지를 비교
> 2. Manual Comparison: 객체 인스턴스의 프로퍼티들을 읽어들이고 그들간 비교
> 3. Shallow Equality: 객체 인스턴스의 프로퍼티 리스트간 비교
> 4. Deep Equality: shallow equality 와 동일하게 진행하지만 nested object 에 대해서도 check진행
인스턴스를 비교하는 데에 있어서 Reference를 비교하냐 그 속에있는 value들을 비교하냐의 상황에 따라 비교 해야할 요소가 다 다름
- **SOLID 원칙에서 SRP 단일책임원칙에 대해 학습하고 정리한다**
- Single Responsiblity Principle (단일 책임 원칙)
> 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임(기능)만을 가져야 한다
* 새로운 요구사항과 프로그램 변경에 있어서 영향 받는 부분이 적아야 한다
* 응집도는 높고 결합도는 낮은 프로그램
* 책임이 증가하면 내부 함수끼리 강한 결합을 하게 되고 이는 유지보수 비용을 높인다
- **SOLID 원칙에서 LSP 리스코프교환원칙 대해 학습하고 정리한다.**
- Liskov Substitution Principle (리스코프 치환 원칙)
> 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.
* 부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 한다
* 부모 클래스의 인스턴스 대신 자식 클래스의 인스터스를 사용해도 문제가 없어야 한다