프로토타입(Prototype)

잡초·2023년 3월 15일

프로토타입(Prototype)이란

JavaScript에서 프로토타입(prototype)은 객체 지향 프로그래밍에서 상속을 구현하는 방법 중 하나다.


배열 자료형을 담은 변수에서 sort 메소드를 사용할 수 있는 이유는 무엇일까?
이는 뭔가 내부적으로 배열 자료형에는 위 메소드를 쓸 수 있게 처리해 놓았기 때문일 것이다.
어떻게 처리해 놓았을까? 바로 상속이라는 개념을 통해서이다.

모든 JavaScript 객체는 다른 객체를 상속한다. 객체는 자신의 부모 역할을 하는 다른 객체를 참조할 수 있는데, 그중 원형이 되는 객체를 프로토타입이라고 한다. 객체는 자신의 프로토타입에 정의된 속성과 메소드를 상속받는다.

간단하게 Array(배열)을 예로들어 설명해 보자.

Array(배열) 클래스와 인스턴스, 그리고 프로토타입의 관계

배열(arr)은 Array 클래스의 인스턴스이며, 프로토타입에는 다양한 메서드가 존재한다.

위의 예시에서 배열 자료형을 담은 변수에서 sort 메소드를 사용할 수 있는 이유가 바로 Array 클래스에서 상속받았기 때문이다.

상속은 .prototype 프로퍼티를 통해 가능하다. 객체의 프로토타입에 접근하기 위해서는 해당 객체의 .__proto__ 프로퍼티를 사용해야 한다.

여기서 나오는 .prototype.__proto__의 차이는 뭘까

간단히 말하면 .prototype는 자신이 상속해 줄 수 있는 데이터나 메소드, .__proto__는 해당 객체의 프로토타입(prototype) 객체를 가리키는 것이다.

.prototype은 원형이 되는 객체를 불러오거나, 변경하기 때문에 상속받은 자식 객체들에도 적용되기에 조심해야한다.

프로토타입 체인(Prototype Chain)

JavaScript에서 객체는 다른 객체로부터 상속을 받을 수 있다. 이러한 상속 관계를 구현하는 방법 중 하나가 프로토타입 체인(Prototype Chain)이다.

프로토타입 체인은 객체의 .__proto__ 프로퍼티를 통해 이루어진다. .__proto__ 프로퍼티는 해당 객체의 프로토타입 객체를 가리킨다. 이렇게 객체의 .__proto__ 프로퍼티를 따라가면서 .__proto__ === null이 되는 최상위 프로토타입 객체(일반적으로 Object.prototype)에 도달할 때까지 탐색하는 과정을 프로토타입 체인이라고 한다.

profile
개발자가 되고싶은 잡초

0개의 댓글