IncompatibleClassChangeError — 클래스 정의가 비호환적으로 바뀌었을 때

IncompatibleClassChangeError — 클래스 정의가 비호환적으로 바뀌었을 때

IncompatibleClassChangeError는 어떤 클래스 정의에 호환되지 않는 변경이 발생했을 때 던져지는 에러예요. 현재 실행 중인 메서드가 의존하던 클래스의 정의가 그 이후에 바뀌어 버린 상황을 나타내요.

출처: Java API Reference

본문

이 에러는 클래스를 어떻게 사용할지와 실제 정의가 어긋날 때 생겨요. 예를 들어 상속 관계에서 인스턴스 메서드였던 게 static으로 바뀌었다거나, 추상 메서드의 구현 여부가 달라졌다거나 하는 식의 바이너리 호환성(binary compatibility) 문제가 대표적이에요. 보통 컴파일러가 잡아 주므로, 런타임에서 만난다면 라이브러리 버전 간 비호환을 의심해 봐야 해요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Error
      java.lang.LinkageError
        java.lang.IncompatibleClassChangeError

대표적인 하위 클래스로 AbstractMethodError, IllegalAccessError, InstantiationError, NoSuchFieldError, NoSuchMethodError가 있어요.

생성자

  • IncompatibleClassChangeError() — 상세 메시지 없이 생성해요.
  • IncompatibleClassChangeError(String s) — 지정된 상세 메시지로 생성해요.

더 알아보기 (Learn more)