본문 바로가기

JAVA

[Java] 다이아몬드 상속

개요

클래스는 단 하나의 클래스만 상속받을 수 있다. 왜 그럴까? 그 이유는 바로 다이아몬드 상속 때문이다.

 

 


 

다이아몬드 상속

객체지향 프로그래밍(OOP)에서 다중 상속을 사용할 때 발생할 수 있는 모호성 문제(ambiguity problem)를 설명하는 용어이다.

 

 

다음 클래스 다이어 그램을 통해 설명하였다.

  • Car와 Airplane Class가 각각 Vehicle을 상속받는다.
  • FlyCar는 Car와 AirPlane Class를 상속받는다.

이렇게 되면 FlyCar는 Vehicle의 move() 메서드를 두 번 상속받게 될 가능성이 있고, 이로 인해 모호성(ambiguity)이나 중복된 맴버의 문제가 발생한다.

 

 

어떤 모호성인가?

  • FlyCar 객체에서 Vehicle의 move() 메서드를 호출하면, FlyCar가 Car와 Airplane을 통해 두 번 상속되었기 때문에, 어떤 경로로 상속된 Vehicle 메서드인지 모호해진다.

 


 

대안

다중 구현이 가능한 인터페이스를 활용해야 한다.

 

인터페이스가 다이아몬드 상속 문제에 걸리지 않는 이유는 다음과 같다.

interface Vehicle {
    void move();
}

interface Car extends Vehicle {}
interface Airplane extends Vehicle {}

class FlyCar implements Car, Airplane {
    @Override
    public void move() {
        System.out.println("하늘을 나는 자동차가 움직입니다.");
    }
}
  • Car와 Airplane은 Vehicle 인터페이스를 상속받고 있다. 따라서 move() 메서드를 써줄 필요가 없다.
  • Vehicle, Car, Airplane 어디에서도 move 메서드가 구현되어있지 않아서 충돌이나 모호성이 없다.

'JAVA' 카테고리의 다른 글

[Java] 예외 처리  (0) 2025.04.23
[Java] Lv_3 계산기 문제  (0) 2025.04.22
[Java] toString()  (0) 2025.04.18
[Java] Lv_2 계산기 프로젝트  (0) 2025.04.18
[Java] Lv_1 계산기 프로젝트  (0) 2025.04.17