IllegalAccessError — 접근 권한이 없는 필드나 메서드에 손을 댔을 때

IllegalAccessError — 접근 권한이 없는 필드나 메서드에 손을 댔을 때

IllegalAccessError는 애플리케이션이 접근할 수 없는 필드를 읽거나 수정하려 하거나, 호출할 수 없는 메서드를 호출하려 할 때 던져지는 에러예요. 대부분의 경우 이 에러는 컴파일 타임에 잡히지만, 클래스 정의가 서로 호환되지 않게 바뀌어 버렸다면 런타임에서 마주칠 수도 있어요.

출처: Java API Reference

본문

이 에러는 컴파일러가 private 필드나 메서드 같은 접근 불가 요소를 건드리려는 코드를 미리 막아 주기 때문에, 평소에는 거의 볼 일이 없어요. 문제는 클래스 정의가 비호환적으로 변경된 경우예요. 이때는 컴파일 당시엔 잘 되던 코드가 런타임에서야 이 에러를 내며 실패할 수 있어요.

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

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

IncompatibleClassChangeError의 하위 클래스라서, 이미 이 에러를 기대하고 잡고 있는 코드와도 잘 어울려요.

생성자

  • IllegalAccessError() — 상세 메시지 없이 IllegalAccessError를 생성해요.
  • IllegalAccessError(String s) — 지정된 상세 메시지와 함께 생성해요.

보통 이 에러를 직접 던지기보다는, 위에서 말한 것처럼 클래스 정의가 바뀐 상황에서 JVM이 던지는 걸 받게 돼요.

더 알아보기 (Learn more)