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

JavaScript에서 객체 지향 프로그래밍을 다룰 때, 다형성과 다중 상속은 중요한 개념입니다. 이번 포스트에서는 두 가지 개념 간의 차이점을 살펴보도록 하겠습니다.

다형성 (Polymorphism)

다형성이란 하나의 인터페이스나 메서드가 여러 형태로 구현될 수 있는 능력을 의미합니다. JavaScript에서는 다형성을 동적 바인딩을 통해 구현합니다. 예를 들어, 동일한 메서드 이름을 가진 다른 객체가 있을 때, 실행 시간에 어떤 객체의 메서드를 호출할지 결정됩니다. 이는 오버로딩이라고도 불리며, JavaScript의 동적 타입 특성 때문에 가능합니다.

아래는 JavaScript에서의 다형성을 보여주는 간단한 예시입니다.

class Animal {
  speak() {
    console.log("음성을 내다");
  }
}

class Dog extends Animal {
  speak() {
    console.log("멍멍");
  }
}

class Cat extends Animal {
  speak() {
    console.log("야옹");
  }
}

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

dog.speak(); // 출력: "멍멍"
cat.speak(); // 출력: "야옹"

다중 상속 (Multiple Inheritance)

다중 상속은 하나의 클래스가 여러 부모 클래스로부터 상속을 받는 것을 의미합니다. JavaScript에서 기본적으로 다중 상속을 지원하지 않습니다. 대신, 믹스인 (Mixin) 기법이 있어 이를 흉내낼 수 있습니다. 믹스인은 여러 객체의 기능을 조합하여 하나의 객체로 만드는 패턴으로, 객체 간의 기능을 공유하거나 확장하는 데 사용됩니다.

아래는 JavaScript에서의 믹스인을 활용한 다중 상속의 예시입니다.

class CanSpeak {
  speak() {
    console.log("말을 하다");
  }
}

class CanFly {
  fly() {
    console.log("날다");
  }
}

class Bird extends CanSpeak {
  constructor() {
    super();
    CanFly.call(this);
  }
}

const bird = new Bird();
bird.speak(); // 출력: "말을 하다"
bird.fly(); // 출력: "날다"

JavaScript에서의 다형성과 다중 상속은 객체 지향 프로그래밍에 있어 중요한 개념이며, 올바르게 이해하고 활용함으로써 유연하고 효율적인 코드를 작성할 수 있습니다.

많은 자바스크립트 개발자들이 ES6에서 추가된 클래스와 모듈 시스템을 통해 객체 지향 프로그래밍을 더 쉽고 강력하게 활용하고 있습니다. ES6를 다룬 JavaScript ES6 핸드북를 참고하시기를 추천드립니다.