prototype을 이해하기 위해서는 상속에 대해 먼저 이해해야한다.
상속
- 새로운 클래스에서 기존 클래스의 모든 프로퍼티와 메소드를 사용할 수 있는 것을 의미한다.
- 상속은 프로그램의 요구에 맞게 기존 클래스를 수정하여 재사용할 수 있다.
C#이나 C++과 같은 클래스 기반의 객체 지향 언어와는 달리 자바스크립트는 프로토타입 기반의 객체 지향 언어다.
자바스크립트의 프로토타입 방식의 상속과 c#,c++의 클래스기반 상속방식의 정확한 차이에 대해 알아보자.
자바스크립트에서는 모든 객체가 자신의 부모 역할을 하는 또 다른 객체인 프로토타입을 가진다. 객체는 다른 객체의 프로토타입을 상속받아 그 속성이나 메서드를 사용할 수 있다.
let person = {
name: 'Alice',
greet: function() {
console.log('Hello, ' + this.name);
}
};
let student = {
__proto__: person,
study: function() {
console.log(this.name + ' is studying.');
}
};
student.greet(); // Hello, Alice
student.study(); // Alice is studying.
여기서 student 객체는 person 객체를 프로토타입으로 설정하여 person 객체의 속성과 메서드를 사용할 수 있다.
클래스 기반 언어에서는 클래스를 정의하고, 그 클래스를 기반으로 객체를 생성한다. 클래스는 객체의 청사진으로 객체의 상태와 행동을 정의한다.
ES6부터 자바스크립트는 클래스 문법을 지원하는데, 프로토타입 기반의 객체 지향을 보다 직관적으로 사용할 수 있다는 장점이 있다.
자바스크립트는 ES6에서 클래스 문법을 도입했지만, 이는 실제로는 프로토타입 기반의 상속을 보다 쉽게 사용할 수 있게 만든 문법적 설탕(syntactic sugar)이다.