반응형
자바스크립트의 프로토타입이란?
JavaScript는 프로토타입 기반의 언어
- 프로토타입 기반의 언어는 객체 간 직접 상속이 이루어진다.
- 객체는
prototype
이라는 특별한 속성을 가지는에 이 속성은 다른 객체에 대한 참조의 역할을 한다 - 객체의 특정 속성에 접근하려고 할 때 그 속성이 해당 객체에 없다면 자바스크립트는 그 객체의
prototype
을 확인한다 - 이러한 과정은 모든 객체의 프로토타입인
Object.prototype
까지 도달하게 되는데 이렇게 연결된 프로토타입들을 프로토타입 체인이라고 한다
프로토타입 체인(예시)
- 위 다이어그램은
car
라는 함수를 선언하고 그 함수의 prototype에drive
라는 메서드를 추가한 뒤 이를 이용하여myCar
라는 객체를 생성하는 과정 - 다이어그램에서
myCar
객체는drive
메서드를 직접 가지고 있지 않지만Car
의 프로토타입을 통해drive
메서드에 접근할 수 있게 된다 - 또한
Car
는Object
의 프로토타입을 상속받기 때문에myCar
객체는Object
의 메서드인toString
과valueOf
도 사용할 수 있다
프로토타입 체인의 예시를 js코드로 작성한다면 아래와 같다
// Car 생성자 함수 정의
function Car() {}
// Car의 프로토타입에 drive 메서드 추가
Car.prototype.drive = function() {
console.log('driving...');
}
// Car 함수를 이용해 myCar 객체 생성
var myCar = new Car();
// myCar 객체는 Car의 프로토타입을 통해 drive 메서드에 접근
myCar.drive(); // "driving..."가 출력
// Car는 Object의 프로토타입을 상속받기 때문에 myCar 객체는 Object의 메서드도 사용이 가능해진다
console.log(myCar.toString()); // [object Object] 출력
위 예시에서 설명한 것과 같이 myCar
객체는 직접 drive
메서드를 가지고 있지 않지만 프로토타입인 Car.prototype
을 통해 dirve
메서드에 접근하게 된다
Car.prototype
역시 마찬가지고 자신의 프로토타입인 Object.prototype
의 메서드를 사용할 수 있기 때문에 toString()
을 사용했을 때 해당 정보를 콘솔에 출력할 수 있게 된다
프로토타입 상속
- 객체의 특정 속성에 접근하려고 할 때 JS는 먼저 그 객체 자체에서 해당 속성을 찾게 된다
- 만약 해당 객체에 그 속성이 없으면 객체의 프로토타입에서 속성을 찾게 된다
- 프로토타입에도 객체가 없다면 해당 프로토타입의 프로토타입에서 속성을 찾는 과정을 반복하게 된다
- 이러한 방법으로 프로토타입 체인을 따라 속성을 찾는 과정을 프로토타입 상속이라고 한다
반응형
'Develop Log > JavaScript' 카테고리의 다른 글
폴리필 (polyfill)이 뭘까 (0) | 2023.07.26 |
---|---|
JavaScript - 논리연산자 (0) | 2023.07.25 |
javascript - spread, rest 문법 알아보기 (0) | 2023.07.24 |
JS 데이터 타입, 얕은 복사, 깊은 복사 (0) | 2023.07.22 |
일반 함수와 화살표 함수 (0) | 2023.07.18 |