프로토타입 체이닝

soheey·2021년 6월 10일
0

프로토타입 체이닝이란?

자바 스크립트는 C++나 자바 같은 객체 지향 프로그래밍 언어와는 다른 프로토 타입 기반의 객체 지향 프로그래밍을 지원한다. 자바스크립트에서 프로토타입과 프로토 타입 체이닝은 OOP 상속의 근간이 된다.

자바와 같은 객체지향 프로그래밍에서는 클래스를 정의하고 니를 통해 객체를 생성하지만, 자바스키립트에서는 이러한 클래스의 개념이 없다. 대신에 객체 리터럴이나 생성자 함수로 객체를 생성한다. 이렇게 생성된 객체의 부모 객체가 바로 '프로토타입' 객체다. 즉, 상속 개념과 마찬가지로 자식 객체는 부모 객체가 가진 프로퍼티 접근이나 메서드를 상속받아 호출하는 것이 가능하다.

자바스크립트의 모든 객체는 자신의 부모인 프로토타입 객체를 가리키는 참조 링크 행태의 숨겨진 프로퍼티가 있다. ECMAScipt에서는 이러한 링크를 암묵적 프로토타입 링크라고 부르며 이러한 링크는 모든 객체의 [[Prototype]] 링크 라고 부른다.

자바스크립트에서 모든 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 프로토 타입 객체를 자신의 부모 객체로 설정하는 [[Prototype]] 링크로 연결한다.

// Person 생성자 함수
function Person(name) {
	this.name = name;
    }
    
// foo 객체 형성
var foo = new Person('foo');
console.log(Person);
console.dir(foo);

Person() 생성자 함수는 prototype 프로퍼티로 자신과 링크된 프로토타입 객체를 가리킨다. 자바스크립트 객체 생성 규칙에 의하면 Person() 생성자 함수로 생성된 foo 객체는 Person() 함수의 프로토타입 객체를 c로 연결한다. 결국, prototype 프로퍼티나 [[Prototype]] 링크는 같은 프로토타입 객체를 가리키고 있다.

prototype 프로퍼티는 함수의 입장에서 자신과 링크된 프로토타입 객체를 가리키고 있으며, 이에 반해 [[Prototype]] 링크는 객체의 입장에서 자신의 부모 객체인 프로토타입 객체를 내부의 숨겨진 링크로 가리키고 있다.

결국, 자바스크립트에서 객체를 생성하는 건 생성자 함수의 역할이지만, 생성된 객체의 실제 부모 역할을 하는 건 생성자 자신이 아닌 생성자의 prototype 프로퍼티가 가리키는 프로토타입 객체다.

결과값을 살펴보면 Person() 생성자 함수의 protype 프로퍼티와 foo 객체의 proto 프로퍼티가 같은 프로토타입 객체를 가리키고 있다는 것을 알 수 있다. 해당 프로토타입 객체는 constructor 프로퍼티가 Person() 생성자 함수를 가리키고 있다.

proto 프로퍼티는 모든 객체에 존재하는 숨겨진 프로퍼티로, 객체 자신의 프로토타입 객체를 가리키는 참조 링크 정보다.

레퍼런스: 인사이드 자바스크립트

0개의 댓글

관련 채용 정보