[JS] 프로토타입

dk.han·2022년 10월 7일
0
post-thumbnail

프로토타입 (prototype)

자바스크립트는 프로토타입을 기반으로 한 객체지향언어다. 자바스크립트에서 생성자 함수나 클래스로 만들어진 모든 객체는 기본적으로 Object라는 프로토 타입을 가지고 있다. 또한 모든 객체 내부에는 숨겨진 [[prototype]]을 가지고 있는데 이는 객체 간 상속을 위한 것이다.

인스턴스 레벨의 객체에서는 proto 접근자를 사용해 접근이 가능하고, 생성자 함수나 부모 class는 prototype으로 접근이 가능하다.

class Fruit { // Fruit.prototype 으로 접근가능.
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
}

const apple = new Fruit('사과', 2000) // __proto__ 

Object 프로토타입

모든 자바스크림트 객체들은 개별적인 Object 프로토타입을 상속하는 것이 아닌, 동일한 Object 프로토타입을 상속한다. 아래 코드에서 볼 수 있듯이 obj1과 obj2의 프로토타입은 동일한 Object 프로토 타입니다.

const obj1 = {}
const obj2 = {}

console.log(obj1.__proto__ === obj2.__proto) // true

배열은 Array라는 이름의 프로토타입을 가지고 있기 때문에, Array 프로토타입에 정의되어 있는 함수( push, pop.. 등 ), 속성 ( length 등 )에 접근할 수 있다. Array 프로토타입은 Object 프로토타입을 상속받고 있어 객체에서 사용할 수 있는 함수, 속성을 사용할 수 있다. 이유는 배열도 결국은 객체이기 때문에 Object 프로토타입을 상속하고 있는 것이다.
자바스크립트에서 객체 간 상속의 연결 고리는 프로토타입 체인으로 연결되어 있다.

느낀점

자바스크립트는 프로토타입 기반으로 만들어진 언어이기 때문에, 프로토타입을 이해하는 것은 매우 중요하다. 하지만 자바스크립트가 발전함에 따라 지금은 프로토타입 자체로 객체지향프로그래밍을 하지 않고 새로 추가된 class를 이용해서 하기 때문에, class를 이용하는 방법에 대해 더욱 공부하는 것이 올바른 방향이라 생각한다. 다만, 프로토타입이 무엇인지, 무엇 때문에 프로토타입을 썼는지 정도에 대해서는 알고 있자.

  • 자바스크립트 모든 객체는 Object 프로토타입을 가지고 있다.
  • 이는 객체간 상속을 위해 존재한다.
  • Object 프로토타입은 유일하다.
  • 객체간 상속의 연결 고리는 프로토타입 체인이다.

Reference

0개의 댓글