본문 바로가기

Coding/TIL (Today I Learned)

OOP 02: JavaScript의 Prototype

이어서, 자바스크립트에서 프로토타입은 무엇이고 왜 사용해야 할까?

 

Prototype이란?

C++, Java처럼 클래스를 이용하는 객체지향 언어에서는 객체의 설계도라고 할 수 있는 클래스를 상속할 수 있다.

반면 자바스크립트는 클래스가 아닌 객체를 상속. 이때 상속은 프로토타입 체인이라고 부르는 구조로 구현되어있다.

* ECMA6 표준에서 Class 문법이 추가되었지만 문법이 추가된 것일 뿐, 자바스크립트가 클래스 기반으로 바뀐것은 아님.

 

우리가 함수를 정의하면 두 가지 일이 동시에 이루어진다.

1. 해당 함수에 Constructor(생성자) 자격 부여됨.

2. 해당 함수의 Prototype Object 가 생성됨.

* 생성된 함수와 함수의 Prototype Object 는 서로 참조함.

 

자바스크립트의 함수는 객체이다.

모든 객체는 내부에 프로퍼티를 가지고 있다. __proto__

객체의 __proto__는 부모객체를 가리키는데 그 부모객체를 프로토타입 이라고 한다.

따라서 객체는 __proto__가 가리키는 부모객체(프로토타입)의 프로퍼티를 사용할 수 있다.

이 때 객체는 __proto__가 가리키는 부모 객체의 부모 객체의 부모 객체... 의 프로퍼티도 사용할 수 있다.

이처럼 객체는 자신이 갖고 있지 않은 프로퍼티를 __proto__가 가리키는 상위 객체를 차례대로 거슬러 올라가며 검색을 하는데, 이와 같은 객체의 연결고리를 프로토타입 체인 이라고 한다.

 

왜 쓰나요?

효율적인 메모리 사용 (less memory)

프로토타입을 사용하면 특정 객체의 모든 인스턴스에 대한 메소드를 쉽게 정의 할 수 있다.

프로토타입의 메모리에 한 번 저장된 메소드에 객체의 모든 인스턴스가 액세스 할 수있기 때문.

 


 

개념이 어렵다고 느꼈던 것은 용어가 어려웠기 때문인 것 같다.

__proto__네이밍 뭡니까. 오브젝트와 객체와  __proto__ 그리고 prototype.

한동안 머리속이 혼란했으나 그림으로 그려가며 천천히 되짚어보니 어떤 것인지 충분히 알겠다.

오늘은 여기까지.

 

 

레퍼런스:

[Javascript ] 프로토타입 이해하기

Prototype Chain ( Object Oriented Programming in JavaScript Series - Part 4)