[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를 참고하시기 바랍니다.