[c++] 다중 상속과 객체 지향 디자인 원칙

다중 상속의 장점

다중 상속을 사용하면 여러 부모 클래스의 특성을 받아들일 수 있어 코드의 재사용성이 높아집니다. 예를 들어, “포유류” 클래스와 “날개 달린 동물” 클래스를 상속받아 “박쥐” 클래스를 정의할 수 있습니다.

class Mammal {
    // ...
};

class WingedAnimal {
    // ...
};

class Bat : public Mammal, public WingedAnimal {
    // ...
};

다중 상속의 단점

하지만 다중 상속은 다이아몬드 문제와 같은 문제를 야기할 수 있습니다. 다이아몬드 문제란 각 부모 클래스에서 동일한 이름의 메서드를 갖고 있을 때 파생 클래스에서 모호성이 발생하는 상황을 말합니다.

class A {
public:
    void doSomething() {}
};

class B : public A {
    // ...
};

class C : public A {
    // ...
};

class D : public B, public C {
    // 모호성 발생: doSomething() 호출 시 문제 발생
};

객체 지향 디자인 원칙 준수

다중 상속을 사용할 때는 “인터페이스 분리 원칙”을 준수하여야 합니다. 인터페이스 분리 원칙은 클라이언트가 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리하는 것을 강조합니다.

또한 “의존 역전 원칙”을 고려하여 상위 수준 모듈이 하위 수준 모듈에 의존하지 않도록 설계해야 합니다.

다중 상속을 사용할 때에는 코드 구조를 신중하게 설계하여 위험을 최소화해야 합니다. 객체 지향 디자인 원칙을 준수하여 유지보수가 쉽고 확장 가능한 코드를 작성할 수 있습니다.