다중 상속 인터페이스란?
다중 상속 인터페이스는 하나의 인터페이스가 두 개 이상의 다른 인터페이스로부터 상속을 받는 것을 의미합니다. 이때, 상속받은 여러 인터페이스의 메서드를 하나의 새로운 인터페이스로 묶어서 정의할 수 있습니다.
자바에서는 클래스의 다중 상속은 허용되지 않지만, 인터페이스 간의 다중 상속은 허용됩니다. 이를 통해 새로운 인터페이스가 여러 부모 인터페이스의 특성을 모두 가질 수 있게 됩니다.
예제 코드
interface Drivable {
    void drive();
}
interface Flyable {
    void fly();
}
// Vehicle 인터페이스는 Drivable과 Flyable 인터페이스를 다중 상속받음
interface Vehicle extends Drivable, Flyable {
    void startEngine();
}
위 코드에서 
Vehicle 인터페이스는 Drivable과 Flyable이라는 두 인터페이스를 다중 상속받았습니다. 이로 인해 Vehicle 인터페이스는 drive()와 fly() 메서드를 모두 포함하게 됩니다.이제, 
Vehicle 인터페이스를 구현하는 클래스는 이 세 개의 메서드를 모두 구현해야 합니다.class Car implements Vehicle {
    @Override
    public void drive() {
        System.out.println("Car is driving");
    }
    @Override
    public void fly() {
        System.out.println("Car can't fly");
    }
    @Override
    public void startEngine() {
        System.out.println("Engine started");
    }
}
다중 상속 인터페이스의 장점
- 코드 재사용성: 여러 인터페이스에서 정의된 기능을 새로운 인터페이스에 통합하여, 이를 구현하는 클래스에서 재사용할 수 있습니다.
- 유연한 설계: 인터페이스가 여러 부모 인터페이스의 기능을 가져올 수 있어, 다양한 기능을 가진 복합적인 인터페이스를 쉽게 만들 수 있습니다.
다중 상속 인터페이스의 충돌 문제
만약 상속받는 인터페이스들이 동일한 메서드 시그니처를 가지고 있다면, 이를 구현하는 클래스에서는 해당 메서드를 명확하게 정의해야 합니다.
interface A {
    void doSomething();
}
interface B {
    void doSomething();
}
interface C extends A, B {
    // C는 doSomething() 메서드를 가짐
}
class MyClass implements C {
    @Override
    public void doSomething() {
        System.out.println("MyClass does something");
    }
}
위에서 
A와 B가 동일한 메서드인 doSomething()을 정의하고 있기 때문에, C를 구현하는 MyClass는 이 메서드를 한 번만 구현하면 됩니다.결론
다중 상속 인터페이스는 인터페이스가 여러 부모 인터페이스로부터 상속을 받을 수 있는 개념으로, 다양한 기능을 유연하게 조합하여 사용할 수 있도록 해줍니다. 이를 통해 코드의 재사용성을 높이고, 복잡한 구조를 단순화하는 데 도움이 됩니다.
Share article