[javascript] 다형성과 다중 상속의 차이점

이번에는 자바스크립트에서의 다형성과 다중 상속에 대해 알아보겠습니다.

다형성 (Polymorphism)

다형성은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 같은 이름의 메소드를 여러 클래스에서 다른 방식으로 구현할 수 있는 것을 말합니다. 자바스크립트는 동적 타입 언어이기 때문에 컴파일 시가 아닌 실행 시에 메소드의 동작 방식이 결정됩니다.

다형성은 코드의 유연성을 높여주고, 코드의 재사용성을 높이는데 도움을 줍니다.

아래는 다형성의 간단한 예시입니다.

class Animal {
  makeSound() {
    console.log("Some sound");
  }
}

class Dog extends Animal {
  makeSound() {
    console.log("Bark");
  }
}

class Cat extends Animal {
  makeSound() {
    console.log("Meow");
  }
}

function describeAnimal(animal) {
  animal.makeSound();
}

let dog = new Dog();
let cat = new Cat();

describeAnimal(dog); // 출력: "Bark"
describeAnimal(cat); // 출력: "Meow"

다중 상속 (Multiple Inheritance)

다중 상속은 한 클래스가 두 개 이상의 클래스로부터 상속받는 것을 의미합니다. 자바스크립트는 다중 상속을 지원하지 않습니다. 이는 코드의 복잡성과 모호성을 피하기 위함입니다. 대신, 자바스크립트는 mixin(믹스인) 패턴을 통해 비슷한 기능을 구현할 수 있습니다.

아래는 mixin을 이용한 예시입니다.

class Person {
  constructor(name) {
    this.name = name;
  }
}

// mixin
let canEat = {
  eat(food) {
    console.log(`${this.name} is eating ${food}`);
  }
};

// mixin 적용
Object.assign(Person.prototype, canEat);

let person = new Person("Alice");
person.eat("an apple"); // 출력: "Alice is eating an apple"

이처럼 자바스크립트에서는 다형성을 활용하여 객체의 동작을 다양하게 만들 수 있으며, 다중 상속의 제한을 mixin 패턴을 통해 극복할 수 있습니다.

더 자세한 내용은 MDN web docs를 참고하시기 바랍니다.