다중 상속 인터페이스란?
다중 상속 인터페이스는 하나의 인터페이스가 두 개 이상의 다른 인터페이스로부터 상속을 받는 것을 의미합니다. 이때, 상속받은 여러 인터페이스의 메서드를 하나의 새로운 인터페이스로 묶어서 정의할 수 있습니다.
자바에서는 클래스의 다중 상속은 허용되지 않지만, 인터페이스 간의 다중 상속은 허용됩니다. 이를 통해 새로운 인터페이스가 여러 부모 인터페이스의 특성을 모두 가질 수 있게 됩니다.
예제 코드
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