본문 바로가기
언어/C++

[C++ 기본 공부정리] 16-3. OOP 상속성 - 다중 상속(multiple inheritance)

by 민-Zero 2020. 1. 8.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 다중 상속(multiple inheritance)란?

다중 상속이란 말 그대로 두 개 이상의 여러 클래스를 하나의 자식 클래스가 상속받는 것을 의미한다. 상속받은 모든 클래스의 멤버를 일반 상속처럼 사용할 수 있다. 쉼표(,)를 사용하여 여러 개의 클래스를 동시에 상속받으며 잘 사용되지 않는다. JAVA의 경우 다중 상속을 아예 지원하지 않는다.

문법)

class 자식 클래스명:접근제어자 부모 클래스1, 접근제어자 부모 클래스2,..{

    클래스 멤버

};

 

다음은 다중 상속의 예시이다.

int형 멤버를 가지는 클래스 A와 double형 멤버를 가지는 클래스 B를 생성하였다.

AB라는 클래스를 생성 public을 이용하여 A, B 두 개의 클래스를 상속받았다. 따라서 자식 클래스에서 A, B의 멤버 변수 num과 dnum에 모두 접근 가능하다. 둘 다 동일한 접근 제어자로 상속받고자 하면 접근 제어자를 2번 쓸 필요는 없다. 

 

2. 다중 상속의 문제점

다중 상속의 개념이 잘 쓰이지 않고 JAVA에서는 아예 지원을 하지 않는다고 했다. 이유는 다중 상속을 하게 되면 상당히 많은 문제를 야기시킬 수 있기 때문이다.

 

① 상속받은 부모 클래스의 멤버 변수 또는 함수명이 같을 수 있다.

두 개가 동일한 멤버 변수를 사용할 경우 클래스 자체는 생성되는 메모리가 다르기 때문에 동일한 이름으로 정의가 되지만 상속받은 클래스가 해당 멤버 변수를 사용하려 할 경우 에러가 발생된다.

따라서 범위지정 연산자를 통해 어떤 클래스의 멤버 변수인지 명시해 주지 않으면 어떤 num을 호출하는지 알 수가 없게 된다.

 

② 하나의 클래스를 중복으로 상속받게 되는 경우가 생긴다.

이처럼 A는 B, C에 상속을 해주고 D는 B, C를 상속받아 A를 2번 상속받는 경우가 된다. 따라서 A의 멤버를 두 개씩 가지므로 모호성이 발생하게 되어 에러를 발생시키게 된다. virtual을 사용하면 해결되기는 한다.

 

이처럼 다중 상속의 문제를 해결할 수 있지만 다중 상속은 프로그램을 불필요하게 복잡하게 만들고 실용성이 떨어지므로 최대한 사용을 자제하는 것이 좋다.

댓글