C# 다중 상속의 개념
C#은 클래스에 대한 다중 상속(Multiple Inheritance)을 지원하지 않습니다. 즉, 하나의 클래스가 여러 개의 클래스를 동시에 상속받을 수 없습니다. 이는 다이아몬드 문제(Diamond Problem)와 같은 모호성 문제를 방지하기 위한 언어 설계 결정입니다.
하지만 걱정할 필요는 없습니다. C#에서는 인터페이스(Interface)를 활용하면 다중 상속과 유사한 효과를 얻을 수 있습니다. 하나의 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있기 때문입니다.
인터페이스를 이용한 다중 상속 구현
먼저 두 개의 인터페이스를 정의해 보겠습니다.
public interface BaseOne {
void display();
}
public interface BaseTwo {
void display();
}다음으로 파생 클래스를 선언하듯이 클래스가 두 인터페이스를 함께 구현하도록 설정합니다.
public class ChildOne : BaseOne, BaseTwo {
public void display() {
Console.WriteLine("Child Class!");
}
}위 코드에서 ChildOne 클래스는 BaseOne과 BaseTwo라는 두 개의 인터페이스를 콤마(,)로 구분하여 동시에 구현하고 있습니다. 이것이 바로 C#에서 다중 상속을 흉내 내는 핵심 방법입니다.
전체 예제 코드
이제 자식 클래스의 메서드를 호출하여 C#에서 다중 상속을 구현하는 전체 코드를 살펴보겠습니다.
예제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo {
class Program {
static void Main(string[] args) {
ChildOne c = new ChildOne();
c.display();
Console.ReadKey();
}
}
public interface BaseOne {
void display();
}
public interface BaseTwo {
void display();
}
public class ChildOne : BaseOne, BaseTwo {
public void display() {
Console.WriteLine("Child Class!");
}
}
}실행 결과
Child Class!
정리
- C#은 클래스 간 다중 상속을 허용하지 않지만, 인터페이스를 사용하면 여러 기능을 하나의 클래스에 조합할 수 있습니다.
- 하나의 클래스는 필요에 따라 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
- 인터페이스에는 메서드의 선언만 포함되며, 실제 구현은 해당 인터페이스를 구현하는 클래스에서 담당합니다.
이처럼 인터페이스를 활용하면 다중 상속의 장점인 코드 재사용성과 유연성을 확보하면서도, 복잡한 상속 구조로 인한 모호성 문제는 피할 수 있습니다.