C#/인터페이스

[C#] 왜 클래스는 다중상속 안 되는데, 인터페이스는 되게했을까?

도도돋치 2025. 4. 24. 00:19
Contents 접기
728x90

 

우선 인터페이스와 다중상속을 요약해보자면

 

"인터페이스는 이 함수 꼭 구현해!" 라고 강제하는 '규칙'이고,
다중상속은 그 '규칙'을 여러 개 동시에 적용할 수 있게 해주는 기능이다.

 

인터페이스 + 다중상속 = 여러 규칙 동시에 따르기

인터페이스를 여러 개 상속하면,
그 인터페이스들이 요구하는 메서드를 반드시 다 구현해야 한다.

interface IWalk {
    void Walk();
}

interface ITalk {
    void Talk();
}

class Human : IWalk, ITalk {
    public void Walk() { Console.WriteLine("걷기"); }
    public void Talk() { Console.WriteLine("말하기"); }
}

➡ 이건 Human은 걷고 말할 수 있는 존재여야 해! 라는 `2개의 계약(규칙)`을 동시에 만족하는 것이다.

 

인터페이스 사용의 핵심

🔥 핵심은 `역할(기능)`을 명확히 분리해서, 조합하고, 다형성을 활용하기 위함

interface IDrivable { void Drive(); }
interface IFlyable { void Fly(); }

class Car : IDrivable { public void Drive() { ... } }
class Plane : IFlyable { public void Fly() { ... } }
class FlyingCar : IDrivable, IFlyable {
    public void Drive() { ... }
    public void Fly() { ... }
}

 

  • 각각의 기능이 명확히 분리돼 있고,
  • 나중에 FlyingCar는 둘 다 조합해서 쓸 수 있다.
  • 그리고 어떤 메서드에서는 IDrivable만 받겠다, 어떤 곳은 IFlyable만 받겠다 하는 유연한 구조가 가능해진다.

 

왜 클래스는 다중상속 안 되는데, 인터페이스는 되게 했을까?

클래스끼리는:

  • 멤버(필드, 메서드) 중복 충돌 가능성 있음
  • 구현이 겹치면 "누구 걸 쓸래?" 애매해짐

인터페이스는:

  • 구현이 없고, 시그니처(이름 + 매개변수)만 있음
  • 충돌 위험이 없음
  • "이 규칙 지켜!"만 정해주고 실제 구현은 각자 알아서 함

그래서 인터페이스는 다중상속 가능하도록 만든 것이다.

 

 

📖 정리

 

  • 인터페이스: "이 기능은 꼭 있어야 해" 를 정해주는 '약속'
  • 다중 인터페이스 상속: 여러 역할을 동시에 갖춘 클래스 만들기 가능
  • 클래스 상속은 구현까지 물려받지만, 인터페이스는 규칙만 물려줌 → 충돌 X

 

 

728x90