Contents
접기
728x90
다중 상속(Multiple Inheritance)이란?
한 클래스가 둘 이상의 부모 클래스로부터 상속받는 것.
예를 들어, 만약 C#에서 다중 상속이 가능하다면 이런 식일 것이다.
class A {
public void MethodA() { }
}
class B {
public void MethodB() { }
}
// 이런 식으로 두 클래스를 동시에 상속
class C : A, B {
// MethodA랑 MethodB 둘 다 사용 가능
}
- 다이아몬드 문제(Diamond Problem)란?
한개의 클래스가 두개 이상의 부모 클래스로부터 동일한 멤버를 상속 받는 문제
하지만,
❌ C#에서는 클래스 간의 다중 상속은 지원하지 않는다.
그 이유는 여러 부모 클래스에 같은 이름의 메서드나 속성이 있을 경우 충돌이 생길 수 있어서, 복잡성과 오류 가능성을 줄이기 위해 C#은 클래스 간에는 단일 상속(single inheritance)만 허용한다.
예를 들어보자:
클래스 A에 Print()라는 메서드가 있다
B, C가 A를 상속받고, 둘 다 Print()를 오버라이드
D가 B와 C를 둘 다 상속
👉 이제 D에서 Print()를 호출하면?
😵 B의 Print()를 쓸까? C의 Print()를 쓸까?
➡ 컴파일러도 헷갈려한다.
➡ 명확한 규칙 없이 모호함, 충돌, 예외 발생 가능성 생김
✅ 그래서 C#은 단호하게 결정함
❗ 클래스는 하나만 상속!
👉 대신 인터페이스는 얼마든지 다중 구현 가능하게 하자!
인터페이스는 왜 다중 구현 가능할까?
- 인터페이스에는 구현(코드)가 없다
- 그냥 "이런 메서드가 있어야 해"라는 약속(형태)만 정의
➡ 충돌할 코드 자체가 없으니까 다중 구현해도 안전함
인터페이스
그 대신 C#에서는 인터페이스를 이용한 다중 상속이 가능하다.
interface IWalk {
void Walk();
}
interface ITalk {
void Talk();
}
class Person : IWalk, ITalk {
public void Walk() {
Console.WriteLine("Walking");
}
public void Talk() {
Console.WriteLine("Talking");
}
}
- 이렇게 하면 여러 개의 인터페이스는 동시에 상속할 수 있어서, 다중 상속의 효과를 낼 수 있다.
- 인터페이스는 메서드 시그니처만 정의하고 구현은 안 하니까 충돌 위험도 없다.
- 인터페이스 이름은 I로 시작하는 규칙이 있다.
728x90
'C# > 인터페이스' 카테고리의 다른 글
[C#] 왜 클래스는 다중상속 안 되는데, 인터페이스는 되게했을까? (1) | 2025.04.24 |
---|---|
[C#] 인터페이스 쓰는이유 (0) | 2025.04.24 |