IllegalAccessError — 접근 권한이 없는 필드나 메서드에 손을 댔을 때
IllegalAccessError — 접근 권한이 없는 필드나 메서드에 손을 댔을 때
IllegalAccessError는 애플리케이션이 접근할 수 없는 필드를 읽거나 수정하려 하거나, 호출할 수 없는 메서드를 호출하려 할 때 던져지는 에러예요. 대부분의 경우 이 에러는 컴파일 타임에 잡히지만, 클래스 정의가 서로 호환되지 않게 바뀌어 버렸다면 런타임에서 마주칠 수도 있어요.
본문
이 에러는 컴파일러가 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이 던지는 걸 받게 돼요.