Prototype
❓질문
프로토타입 상속의 동작 방식에 대해 설명해주세요.
💡 조사하기전 내가 알고 있던 내용
프로토타입은 자바스크립트를 설명할때 프로토타입 기반 객체 지향 언어라고 합니다 즉 클래스로 인한 상속을 주로 사용하기보단 프로토타입이라는 기술로 상속을 보통 한다는 것입니다.
그렇다면 프로토 타입은 뭐냐면 우리가 자바스크립트의 배열 객체를 선언한다 치면 그 배열 객체안에는 우리가 만든 메소드가 아닌 .sort()
, .map()
등 다양한 메소드들이 들어있는거 처럼 보입니다. 이는 객체가[[prototype]]
이라는 프로퍼티를 갖고있기 때문입니다. 이안에 들어있는 것이죠
프로토타입의 상속은 프로토타입 체인이라는 방식으로 동작합니다 먼저 해당 객체에 프로퍼티를 살펴본후에 없다면 프로토타입 프로퍼티를 탐색합니다 거기안에도 없다면 그 프로토타입의 프로토타입 프로퍼티를 탐색합니다 그리고 프로토 타입의 없는 객체(Object.prototype) 까지 갔을때도 없다면 그 프로퍼티는 존재하지않는다고 말하는거죠 이걸 프로토 타입 체인
이라고 부릅니다
2번째 문단에서 배열 객체를 생성했을때 프로토타입 프로퍼티가 배열의 프로퍼티가 모인 객체랑 연결되어있기때문에 우리가 사용가능하다고 볼수있습니다.
🏫 정리한 내용
프로토타입은 자바스크립트에서 객체 간의 상속을 구현하는 메커니즘입니다. 자바스크립트의 모든 객체는 기본적으로 [[Prototype]]
이라는 숨김 프로퍼티를 가지고 있으며, 이 프로퍼티는 다른 객체를 참조하거나 null
값을 가집니다. 프로토타입 연결은 Object.create()
나 함수 생성자의 prototype
프로퍼티를 통해 이루어집니다.
프로토타입 상속이 동작하는 방식은 프로토타입 체인을 기반으로 합니다. 객체에서 어떤 프로퍼티를 접근하려고 할 때, 자바스크립트 엔진은 해당 객체에서 프로퍼티를 찾습니다. 그리고 만약 찾을 수 없다면, 객체의 [[Prototype]]
이 가리키는 프로토타입 객체에서 프로퍼티를 탐색합니다. 만약 프로토타입 객체에서도 해당 프로퍼티를 찾지 못하면, 그 다음에는 프로토타입의 프로토타입을 탐색합니다. 탐색 과정을 계속 반복하면서 결국 원하는 프로퍼티를 찾거나, 프로토타입이 null
이 되는 단계에 도달할 때까지 프로토타입 체인을 타고 올라가는 방식으로 탐색합니다. 이런 식으로 프로토타입이 꼬리에 꼬리를 물고 연결된 형태를 두고 프로토타입 체인이라고 부르는 것입니다.