[c#] 클래스와 다중 상속

C#은 다중 상속을 지원하지 않는다. 다중 상속이란 하나의 클래스가 두 개 이상의 클래스로부터 상속을 받는 것을 의미한다. C#은 이러한 구조를 지원하지 않는 이유가 있으며, 이에 대한 이유를 살펴보겠다.

다이아몬드 문제

다중 상속은 다이아몬드 문제(Diamond Problem)라는 혼란을 야기할 수 있다. 이 문제는 많은 객체지향 언어에서 발생하는데, 한 클래스가 두 개 이상의 클래스로부터 상속을 받을 때, 각 상위 클래스가 동일한 메서드나 속성을 가지고 있을 경우 충돌이 발생한다. 이에 대한 해결책으로는 충돌을 해결하는 방법이 필요한데, 이는 복잡성을 증가시킨다.

인터페이스를 활용

C#에서는 인터페이스를 통해 다중 상속과 유사한 기능을 제공한다. 인터페이스는 클래스에서 구현할 수 있는 메서드, 프로퍼티, 이벤트, 인덱서의 명세를 정의하며, 클래스는 하나 이상의 인터페이스를 구현할 수 있다. 이를 통해 클래스 간에 다중 상속이 필요한 기능을 인터페이스를 사용하여 해결할 수 있다.

interface IShape
{
    void Draw();
}

interface IColor
{
    void FillColor();
}

class Circle : IShape, IColor
{
    public void Draw()
    {
        // draw circle
    }

    public void FillColor()
    {
        // fill color
    }
}

위 예제에서 Circle 클래스는 IShapeIColor 인터페이스를 모두 구현하여, 다중 기능을 제공할 수 있다.

C#의 다중 상속과 관련하여 인터페이스를 활용한 설명을 통해, 다중 상속을 지원하지 않는 이유와 이를 보완하는 방법에 대해 알아보았다.

참고 자료