이어서, 자바스크립트에서 프로토타입은 무엇이고 왜 사용해야 할까?
Prototype이란?
C++, Java처럼 클래스를 이용하는 객체지향 언어에서는 객체의 설계도라고 할 수 있는 클래스를 상속할 수 있다.
반면 자바스크립트는 클래스가 아닌 객체를 상속. 이때 상속은 프로토타입 체인이라고 부르는 구조로 구현되어있다.
* ECMA6 표준에서 Class 문법이 추가되었지만 문법이 추가된 것일 뿐, 자바스크립트가 클래스 기반으로 바뀐것은 아님.
우리가 함수를 정의하면 두 가지 일이 동시에 이루어진다.
1. 해당 함수에 Constructor(생성자) 자격 부여됨.
2. 해당 함수의 Prototype Object 가 생성됨.
* 생성된 함수와 함수의 Prototype Object 는 서로 참조함.
자바스크립트의 함수는 객체이다.
모든 객체는 내부에 프로퍼티를 가지고 있다. __proto__
객체의 __proto__는 부모객체를 가리키는데 그 부모객체를 프로토타입 이라고 한다.
따라서 객체는 __proto__가 가리키는 부모객체(프로토타입)의 프로퍼티를 사용할 수 있다.
이 때 객체는 __proto__가 가리키는 부모 객체의 부모 객체의 부모 객체... 의 프로퍼티도 사용할 수 있다.
이처럼 객체는 자신이 갖고 있지 않은 프로퍼티를 __proto__가 가리키는 상위 객체를 차례대로 거슬러 올라가며 검색을 하는데, 이와 같은 객체의 연결고리를 프로토타입 체인 이라고 한다.
왜 쓰나요?
효율적인 메모리 사용 (less memory)
프로토타입을 사용하면 특정 객체의 모든 인스턴스에 대한 메소드를 쉽게 정의 할 수 있다.
프로토타입의 메모리에 한 번 저장된 메소드에 객체의 모든 인스턴스가 액세스 할 수있기 때문.
개념이 어렵다고 느꼈던 것은 용어가 어려웠기 때문인 것 같다.
__proto__네이밍 뭡니까. 오브젝트와 객체와 __proto__ 그리고 prototype.
한동안 머리속이 혼란했으나 그림으로 그려가며 천천히 되짚어보니 어떤 것인지 충분히 알겠다.
오늘은 여기까지.
레퍼런스:
Prototype Chain ( Object Oriented Programming in JavaScript Series - Part 4)
'Coding > TIL (Today I Learned)' 카테고리의 다른 글
Data Structure 03. Tree, Binary Search Tree (0) | 2019.12.13 |
---|---|
Data Structure 02: (0) | 2019.12.09 |
Data Structure 01: Stack & Queue (0) | 2019.12.07 |
OOP 01: 객체지향 프로그래밍의 컨셉 (0) | 2019.12.06 |
Git 02. 개념과 주요 명령어 (0) | 2019.12.05 |