더북(TheBook)

3.2.3 기본 메서드의 충돌 해결


클래스가 인터페이스를 두 개 구현하다고 하자. 그런데 한 인터페이스에는 기본 메서드가 있고, 다른 한 인터페이스에는 이 메서드와 이름, 매개변수 타입이 같은 메서드(기본이든 아니든)가 있다면 반드시 충돌을 해결해야 한다. 물론 자주 일어나는 상황은 아니며, 대부분 해결하기도 쉽다.

그럼 예제를 살펴보자. 다음과 같은 getId 메서드를 가진 Person 인터페이스가 있다고 하자.

public interface Person {

    String getName();

    default int getId() { return 0; }

}


그리고 Identified 인터페이스도 getId를 기본 메서드로 가진다고 하자.

public interface Identified {

    default int getId() { return Math.abs(hashCode()); }

}


hashCode 메서드가 수행하는 일은 4장 상속과 리플렉션에서 자세히 살펴본다. 지금은 hashCode 메서드가 객체에서 파생한 정수를 반환한다는 사실이 중요하다.

그럼 Person 인터페이스와 Identified 인터페이스를 구현하는 클래스를 만들면 어떻게 될까?

public class Employee implements Person, Identified {

    ...

}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.