<p. 175>
자바스크립트는 프로토타입 기반 언어이기 때문에
'상속'개념이 존재하지 않습니다.
(이는 클래스 기반의 다른 언어에 익숙한 많은 개발자들을 혼란스럽게 함)
그리하여 니즈에 따라 ES6에는 클래스 문법이 추가됐습니다.
객체지향 프로그래밍에서 거의 반드시 등장하는 제 1요소인 클래스는 단어의 의미는 일반적으로 쓰이는 의미와 거의 흡사하다.
영어사전에서 class '계급, 집단, 집합' 등으로 번역하는데,
프로그래밍 언어적으로도 이와 동일한 개념에서 접근하면 된다.
ex. 음식 >> 고기, 채소, 과일 >> 배, 사과, 바나나, 감, 오렌지
<p. 176>
그림 7-1과 같이 음식, 과일은 모두 집단, 즉 클래스입니다.
앞에 super-, sub-를 접목해서 상위 클래스(superclass)/하위 클래스(subclass)로 표현합니다.
그림 7-2
음식은 과일의 superclass, 과일은 음식의 subclass 이면서 귤류의 superclass 입니다.
또한, 음식은 귤류의 super-superclass입니다.
동시에 귤류는 음식의 sub-subclass입니다.
즉, 하위 개념은 상위 개념을 포함하면서 더 구체적인 개념이 추가됩니다.
이처럼 클래스는 하위로 갈수록 상위 클래스의 속성을 상속하면서 더 구체적인 요건이 추가 또는 변경됩니다.
물론, 하위 클래스가 아무리 구체화되더라도 상위 클래스는 결국 추상적인 개념일뿐입니다.
한편, 감귤 자몽, 천혜향 등은 구체적인 개체들입니다.
앞의 클래스들의 속성을 지니는, 실존하는 개체입니다.
이와같이 어떤 클래스의 속성을 지니는 실존하는 개체를 일컬어
인스턴스instance 라고 합니다.
조건=클래스
어떤 클래스에 속한 개체는 클래스의 조건을 모두 만족하므로
클래스의 구체적인 예시=인스턴스
현실세계에서는 개체들이 이미 존재하는 상태에서
→ 이들을 구분짓기 위해 클래스를 도입합니다.
(그래서 하나의 개체가 같은 레벨에 있는 서로 다른 여러 클래스의 인스턴스일수도 있다. ex) 진희는 여성이면서 개발자이고 한국인이라는 여러 분류에 속함)
→ 이미 존재하는 진희를 성질에 따라 분류해서 다양한 클래스가 생성되는 것
순서: 인스턴스 → 클래스
현실세계와 정반대이다.
컴퓨터는 위와 같은 구분법을 알지 못하므로
사용자가 직접 여러 가지 클래스를 정의해야 한다.
클래스를 바탕으로 인스턴스를 만들 때 비로소 어떤 개체가 클래스의 속성을 지니게 된다.
한 인스턴스는 하나의 클래스만을 바탕으로 만들어진다.
(어떤 인스턴스가 다양한 클래스에 속할 수는 있지만,
결국 인스턴스를 생성할 때 호출할 수 있는 클래스는 오직 하나뿐일 수 밖에 없다.)
순서: 클래스 → 인스턴스
인스턴스에 상속되는지(인스턴스가 참조하는지) 여부에 따라
(그런데 다른 클래스 기반 언어와 달리
자바스크립트에서는 인스턴스에서도 직접 메서드를 정의할 수 있기 때문에
'인스턴스 메서드'라는 명칭은
프로토타입에 정의한 메서드를 지칭하는 것인지
인스턴스에 정의한 메서드를 지칭하는 것인지에 대해 혼란을 야기한다.)
따라서 이 명칭 대신에 자바스크립트의 특징을 살려
'프로토타입 메서드'라고 부르는 것이 좋다.
인스턴스에서 직접 호출할 수 있는 메서드가 바로
프로토타입 메서드이다.