자바스크립트 생성자와 프로토타입 체인의 메서드 다중 상속 구현

자바스크립트는 클래스 기반의 객체 지향 언어보다는 프로토타입 기반의 언어로 알려져 있습니다. 이는 객체를 생성하기 위해 생성자 함수프로토타입 체인을 이용하는 것을 의미합니다. 이것은 자바스크립트에서 다중 상속을 직접적으로 지원하지 않는다는 의미이기도 합니다. 하지만 자바스크립트를 이해하고 이를 활용한다면 다중 상속과 비슷한 효과를 얻을 수 있습니다.

다중 상속의 개념 이해

다중 상속은 한 클래스가 여러 부모 클래스로부터 상속받는 것을 의미합니다. 이는 부모 클래스들의 특성을 모두 가지고 있는 자식 클래스를 생성할 수 있도록 해줍니다. 예를 들어, Person, Developer, Designer라는 세 가지 클래스가 있다고 했을 때, DeveloperPerson 클래스로부터 개인 정보에 관련된 메서드를, DesignerPerson 클래스로부터 디자인 관련 메서드를 상속받는 형태이지요.

자바스크립트에서 다중 상속 구현하기

자바스크립트에서 다중 상속을 구현하기 위해선, Object.assign() 메서드를 활용할 수 있습니다. 이 메서드를 사용하면 여러 객체의 프로퍼티 및 메서드를 한 객체로 병합할 수 있습니다.

아래는 Developer 클래스가 Person 클래스와 Designer 클래스로부터 상속받는 예시입니다.

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

Person.prototype.greet = function() {
  console.log(`안녕하세요, ${this.name}입니다.`);
}

function Designer(name, designStyle) {
  Person.call(this, name);
  this.designStyle = designStyle;
}

Designer.prototype = Object.create(Person.prototype);
Designer.prototype.constructor = Designer;
Designer.prototype.showDesignStyle = function() {
  console.log(`저는 ${this.designStyle}을(를) 주로 디자인합니다.`);
}

function Developer(name, codingLanguage) {
  Person.call(this, name);
  this.codingLanguage = codingLanguage;
}

Object.assign(Developer.prototype, Person.prototype);
Developer.prototype.constructor = Developer;
Developer.prototype.showCodingLanguage = function() {
  console.log(`저는 ${this.codingLanguage}를 주로 개발합니다.`);
}

const john = new Developer('John', 'JavaScript');
john.greet(); // 출력: 안녕하세요, John입니다.
john.showCodingLanguage(); // 출력: 저는 JavaScript를 주로 개발합니다.

위의 코드에서 Object.assign() 메서드를 사용하여 Developer 클래스의 프로토타입 객체에 Person 클래스의 메서드를 병합했습니다. 이렇게 함으로써 Developer 클래스는 Person 클래스의 메서드 greet()을 사용할 수 있게 되었습니다.

요약

자바스크립트에서는 다중 상속을 직접적으로 지원하지 않지만, Object.assign() 메서드를 이용해 다른 클래스의 메서드를 상속받을 수 있습니다. 이를 활용하면 다중 상속과 비슷한 효과를 얻을 수 있습니다. #JavaScript #다중상속