Prototype

❓질문

프로토타입 상속의 동작 방식에 대해 설명해주세요.


💡 조사하기전 내가 알고 있던 내용

프로토타입은 자바스크립트를 설명할때 프로토타입 기반 객체 지향 언어라고 합니다 즉 클래스로 인한 상속을 주로 사용하기보단 프로토타입이라는 기술로 상속을 보통 한다는 것입니다.

그렇다면 프로토 타입은 뭐냐면 우리가 자바스크립트의 배열 객체를 선언한다 치면 그 배열 객체안에는 우리가 만든 메소드가 아닌 .sort(), .map()등 다양한 메소드들이 들어있는거 처럼 보입니다. 이는 객체가[[prototype]]이라는 프로퍼티를 갖고있기 때문입니다. 이안에 들어있는 것이죠

프로토타입의 상속은 프로토타입 체인이라는 방식으로 동작합니다 먼저 해당 객체에 프로퍼티를 살펴본후에 없다면 프로토타입 프로퍼티를 탐색합니다 거기안에도 없다면 그 프로토타입의 프로토타입 프로퍼티를 탐색합니다 그리고 프로토 타입의 없는 객체(Object.prototype) 까지 갔을때도 없다면 그 프로퍼티는 존재하지않는다고 말하는거죠 이걸 프로토 타입 체인이라고 부릅니다

2번째 문단에서 배열 객체를 생성했을때 프로토타입 프로퍼티가 배열의 프로퍼티가 모인 객체랑 연결되어있기때문에 우리가 사용가능하다고 볼수있습니다.


🏫 정리한 내용

프로토타입은 자바스크립트에서 객체 간의 상속을 구현하는 메커니즘입니다. 자바스크립트의 모든 객체는 기본적으로 [[Prototype]]이라는 숨김 프로퍼티를 가지고 있으며, 이 프로퍼티는 다른 객체를 참조하거나 null 값을 가집니다. 프로토타입 연결은 Object.create()나 함수 생성자의 prototype 프로퍼티를 통해 이루어집니다.

프로토타입 상속이 동작하는 방식은 프로토타입 체인을 기반으로 합니다. 객체에서 어떤 프로퍼티를 접근하려고 할 때, 자바스크립트 엔진은 해당 객체에서 프로퍼티를 찾습니다. 그리고 만약 찾을 수 없다면, 객체의 [[Prototype]]이 가리키는 프로토타입 객체에서 프로퍼티를 탐색합니다. 만약 프로토타입 객체에서도 해당 프로퍼티를 찾지 못하면, 그 다음에는 프로토타입의 프로토타입을 탐색합니다. 탐색 과정을 계속 반복하면서 결국 원하는 프로퍼티를 찾거나, 프로토타입이 null이 되는 단계에 도달할 때까지 프로토타입 체인을 타고 올라가는 방식으로 탐색합니다. 이런 식으로 프로토타입이 꼬리에 꼬리를 물고 연결된 형태를 두고 프로토타입 체인이라고 부르는 것입니다.