[javascript] 자바스크립트 프로토타입 상속 방식

자바스크립트는 프로토타입 기반의 언어로, 상속을 프로토타입 체인을 통해 구현합니다. 이것은 일반적인 클래스 기반 언어의 상속 방식과는 조금다르며, 몇 가지 유용한 개념을 제공합니다. 자바스크립트에서 프로토타입 상속을 이해하는 데 도움이 될 만한 몇 가지 개념을 살펴보겠습니다.

1. 프로토타입

자바스크립트는 모든 객체가 다른 객체로부터 상속받은 속성들을 포함하는데, 이를 프로토타입이라고 합니다. 즉, 모든 객체는 다른 객체의 프로퍼티를 바로 사용할 수 있습니다.

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('Alice');
person1.greet(); // 출력: "Hello, my name is Alice"

위 예제에서 Person 함수의 프로토타입에 greet 메서드를 추가하였고, 이를 상속받은 person1 객체에서 호출할 수 있습니다.

2. 프로토타입 체인

객체의 프로토타입에도 다시 프로토타입이 존재할 수 있으며, 이를 통해 자바스크립트는 여러 단계의 상속을 지원합니다.

function Animal(type) {
  this.type = type;
}

Animal.prototype.sound = function() {
  console.log('Some sound');
};

function Dog(name) {
  this.name = name;
}

Dog.prototype = new Animal('mammal');

const dog1 = new Dog('Buddy');
dog1.sound(); // 출력: "Some sound"

위 예제에서 Dog 객체는 Animal 객체의 프로토타입을 상속받았으며, dog1 객체에서 sound 메서드를 호출할 수 있습니다.

자바스크립트에서는 Object.getPrototypeOf 또는 __proto__ 등을 사용하여 객체의 프로토타입에 접근할 수 있습니다.

3. 클래스 기반 상속과의 차이점

프로토타입 상속은 클래스 기반 상속과는 다르게 동작합니다. 클래스 기반 언어에서는 클래스를 정의한 후, 객체를 만들 때마다 클래스가 복사되어 새로운 인스턴스가 생성되는 반면, 자바스크립트에서는 프로토타입을 통해 객체 간에 속성을 공유합니다.

결론

프로토타입 상속은 자바스크립트에서의 상속 방식을 이해하는 데 중요한 개념입니다. 프로토타입을 이용하면 객체 간에 속성을 공유하고, 새로운 객체를 생성할 때 중복된 속성을 생성하지 않아도 되므로 메모리를 절약할 수 있습니다.

프로토타입 상속을 이해하면 자바스크립트의 객체 지향적인 특성을 더 잘 활용할 수 있으며, 효율적인 코드를 작성하는 데 도움이 됩니다.

참고 자료: MDN Web Docs