티스토리 뷰
자바스크립트는 프로토타입 기반 oop이기 때문에 상속이 존재하지 않는다. 하지만, 다른 언어들이 클래스 기반인 경우가 많아서 ES6(ES 2015)에 와서야 class 문법이 추가되었다.
+참고로 es5가 2009 es5.1이 2011 그 이후는 2015부터 2021까지 6, 7, 8, 9, 10, 11, 12까지 나왔다.
1.클래스와 인스턴스의 개념 이해
1.1 클래스 기반의 분류 개념
- class는 분류를 위한 개념이다. 상위클래스에서 하위클래스로 간다.(음식 -> 과일 -> 귤류 등). 클래스로 생성된 실제 개체는 instance라고 한다.
- 현실세계에서는 개체들이 이미 존재하는 상태에서 이들을 구분 짓기위해서 클래스가 존재한다. 클래스보다 실존 개체가 먼저인 것이다. 예를 들어 '나'를 분류하는 기준이 남자, 한국인, 직장인 이렇게 되는 것이다.
- 컴퓨터에서 실존 개체는 클래스로 부터 생성된다. 다중 상속을 통해 여러 특성을 물려받을 수는 있지만, 결국에는 어떤 특정 클래스가 인스턴스를 생성해야한다. 이게 클래스 기반 OOP의 한계이다.
2. 자바스크립트의 클래스
- 자바스크립트는 6장에서 설명했듯이 상속이 아닌 프로토타입 체이닝에 의한 속성공유가 일어난다.
- 스태틱 메서드and프로퍼티 vs 프로토 타입 프로퍼티and메서드
- 스태틱으로 선언한 매서드는 인스턴스에서 직접 접근할 수 없다.
3.클래스 상속
3.1 ES6이전의 상속을 구현하기 위한 노력과 어려움
- 프로토타입 체이닝으로 구현했었지만, 구현에 어려움이 많았다.
- 클래스에 있는 값이 인스턴스의 동작에 영향을 미치면 안된다.
- 하위클래스로 삼을 생성자 함수의 prototype에 상위 클래스의 인스턴스를 부여하는 방법으로 메서드 상속이 가능하지만, 이 방법은 한계가 많고 구조적 안정성이 떨어진다.
3.2 클래스가 구체적인 데이터를 지니지 않게 하는 방법
3.1예시들에서 볼 수 있듯이 SubClass.prototye의 __proto__가 SuperClass.prototype을 찾지하고 SubClass.prototype에는 불필요한 인스턴스 프로퍼티들이 남아있지 않게 해야한다.
- 프로퍼티들을 다 지워서 새로운 프로퍼티를 추가하지 못하게 할 수 있다.(첫번째 방안)
- 더글라스 크락포드가 제시한 두번째 방안도 있다.
- object.create를 사용하는 세번째 방법도 있다.
- 그런데 그렇게하면 SubClass의 constructor가 SuperClass의 constructor를 지시하게 된다. 그래서 SubClass자신의 Constructor를 바라보도록 해줘야한다.
위의 3가지 방법으로 ES6 이전에는 클래스 기반 OOP프로그래밍의 클래스의 상속과 추상화를 힘들게 따라했었다.
3.4 상위 클래스로 접근수단 제공(super)
- 예제 코드를 보면 상위 클래스의 메서드를 사용하는 기능(super)도 구현할 수 있다.
4. ES6의 클래스와 클래스 상속
- 예제를 보면 클래스에서 어떻게 스태틱 메서드와 __proto__의 프로퍼티들이 새로운 ES6 클래스 문법이랑 호환되는지 볼 수 있다. 클래스에 대한 설명은 본 책에서 생략되었다.
'FE > JavaScript 팔아요' 카테고리의 다른 글
[Note_deepDive]42장 비동기 프로그래밍 (0) | 2022.09.28 |
---|---|
[Note_deepDive]48장 자바스크립트의 모듈 시스템 (1) | 2022.09.22 |
[Note_코어자바스크립트] 6장 프로토타입 (0) | 2022.01.11 |
[Note_코어자바스크립트] 5장 클로저 (0) | 2022.01.04 |
[Note_코어자바스크립트] 4장 콜백 함수 (0) | 2021.12.28 |