[JavaScript] 프로토타입(prototype)이란?


이번 면접 준비를 하면서 js관련 질문을 받았는데

‘Prototype에 대해 설명해주세요’

관련 지식을 정확히 몰랐기 때문에 필요할 때마다 찾아서 적용했는데 이번 기회에 관련 내용을 정리해보고자 한다.


Prototype

자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있습니다. 그리고 이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 합니다. 이러한 부모 객체를 Prototype 객체 줄여서 Prototype 이라고 합니다.

Prototype 객체는 생성자 함수에 의해 생성된 각각의 객체에 공유 프로퍼티를 제공하기 위해 사용합니다.

var student = {
  name: "lee",
  score: 100,
};

// student에는 hasOwnProperty 메소드가 없지만 아래 구문은 동작한다.
console.log(student.hasOwnProperty("name")); // true

ECMAScript spec에서는 자바스크립트의 모든 객체는 [[Prototype]] 이라는 인터널 슬롯을 가집니다. 인터널 슬롯은 내부속성, 혹은 은닉 속성이라고 이해하면 됩니다.

[[Prototype]] 객체의 데이터는 프로퍼티는 get 엑세스를 위해 상속되며 자식 객체의 프로퍼티처럼 사용할 수 있다. 하지만 set 엑세스는 허용되지 않는다 라고 명시 되어 있습니다.

객체를 생성할 때 프로토타입은 결정됩니다. 결정된 프로토타입 객체는 다른 임의의 객체로 변경할 수 있습니다. 이것은 부모 객체인 프로토타입을 동적으로 변경할 수 있다는 것을 의미합니다. 이러한 특징을 활용하여 객체의 상속을 구현할 수 있습니다.