JavaScript는 다중 상속을 지원할까?
다중 상속(Multiple Inheritance)이란 하나의 객체가 서로 관련 없는 여러 부모 객체로부터 속성과 값을 동시에 상속받는 것을 의미합니다. C++처럼 일부 객체지향 프로그래밍 언어는 이러한 다중 상속을 공식적으로 지원하지만, JavaScript는 다중 상속을 지원하지 않습니다.
JavaScript에서 상속이 작동하는 방식
JavaScript에서 속성 값의 상속은 실행 시간(runtime)에 이루어집니다. 객체에서 특정 값을 찾을 때, JavaScript 엔진은 해당 객체의 프토토타입 체인(prototype chain)을 따라 올라가면서 값을 검색합니다.
그런데 여기서 중요한 제약이 있습니다. 모든 객체는 단 하나의 프로토타입에만 연결되어 있다는 점입니다. 따라서 하나의 객체가 둘 이상의 프로토타입 체인으로부터 동적으로 상속받는 것은 불가능합니다. 이것이 JavaScript가 다중 상속을 기본적으로 지원할 수 없는 핵심적인 이유입니다.
다중 상속을 흉내 내는 우회 방법
그럼에도 불구하고 JavaScript에서 다중 상속과 유사한 동작을 구현하는 몇 가지 우회 방법(workaround)이 존재합니다. 대표적인 예로 믹스인(Mixin) 패턴이나 프록시(Proxy) 객체를 활용하는 방법 등이 있으며, 실제 구현 예시는 아래 Stack Overflow 토론에서 확인할 수 있습니다.
ES6 클래스 다중 상속 관련 Stack Overflow 예제 보기
주의할 점
다만 이러한 우회 방법들은 어디까지나 근사치일 뾰족한 수단일 뿐, 다중 상속에 대한 완전한 지원을 제공하지 않습니다. 각각의 방법마다 고유한 한계와 단점이 있으며, 복잡도가 증가하거나 예상치 못한 동작이 발생할 수 있습니다.
결론적으로 다중 상속은 JavaScript 언어 자체의 기능(feature)이 아니라는 점을 반드시 기억해야 합니다. 코드를 설계할 때는 컴포지션(composition) 또는 믹스인 같은 대안적 패턴을 신중하게 검토하는 것이 바람직합니다.