IllegalAccessException — 리플렉션으로 접근할 수 없는 요소를 건드릴 때

IllegalAccessException — 리플렉션으로 접근할 수 없는 요소를 건드릴 때

IllegalAccessException은 애플리케이션이 리플렉션을 통해 인스턴스를 만들거나(배열 제외), 필드를 읽고 쓰거나, 메서드를 호출하려는데 현재 실행 중인 코드가 해당 클래스·필드·메서드·생성자 정의에 접근 권한이 없을 때 던져지는 예외예요.

출처: Java API Reference

본문

IllegalAccessError가 클래스 로딩·링크 시점의 에러라면, 이 예외는 리플렉션(reflection) 을 쓸 때 나오는 checked exception이에요. 예를 들어 Field.set(...)이나 Field.get(...), Method.invoke(...) 같은 호출에서 접근 제어를 위반하면 이 예외가 날아와요.

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

java.lang.Object
  java.lang.Throwable
    java.lang.Exception
      java.lang.ReflectiveOperationException
        java.lang.IllegalAccessException

ReflectiveOperationException의 하위 클래스라서, 리플렉션 관련 예외를 한 번에 잡고 싶을 때 그 부모 타입으로 처리하기도 좋아요.

생성자

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

직접 이 예외를 던지기보다는, 주로 리플렉션 API가 던져 주는 걸 받는 형태로 사용돼요.

더 알아보기 (Learn more)