IllegalAccessException — 리플렉션으로 접근할 수 없는 요소를 건드릴 때
IllegalAccessException — 리플렉션으로 접근할 수 없는 요소를 건드릴 때
IllegalAccessException은 애플리케이션이 리플렉션을 통해 인스턴스를 만들거나(배열 제외), 필드를 읽고 쓰거나, 메서드를 호출하려는데 현재 실행 중인 코드가 해당 클래스·필드·메서드·생성자 정의에 접근 권한이 없을 때 던져지는 예외예요.
본문
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가 던져 주는 걸 받는 형태로 사용돼요.