자바 리플렉션 (Reflection) 이란?
- 실행 중인 자바 애플리케이션이 JRE (Java Runtime Environment) 를 검사, 수정, 상호작용할 수 있도록 하는 기능이다.
- 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있다.
자바 리플렉션의 용도 (Use Case)
- 리플렉션의 대부분의 기능은 일반 애플리케이션 개발에는 크게 필요 없으며 프레임워크의 관점에서 접근할 때 크게 도움이 된다.
- ex) 프레임워크 이용자가 어떤 애노테이션을 적용했는지 알고 싶을 때는 리플렉션이 크게 도움이 된다.
클래스 구조 검사하기
- 객체의 클래스를 확인하고 어떤 메서드가 있는지 어떤 필드가 있는지 어떻게 구성됐는지에 대한 정보를 얻을 수 있다.
- 어떤 상수와 애노테이션이 선언되어 있는지 확인할 수도 있다.
우리가 스프링에서 사용하는
@Controller
같은 애노테이션은 리플렉션에 의해 인식된다.
클래스의 인스턴스 만들기
- 컴파일 시 클래스 이름을 몰라도 클래스의 새 인스턴스를 만들 수 있다.
- ex) 인자로 전달된 클래스의 정확한 타입을 모르더라도 새 인스턴스를 만드는 게 가능하다.
메서드 호출 및 필드 액세스
- 컴파일 시점에 메서드를 알지 못해도 동적으로 객체의 메서드를 호출하고 필드에 액세스할 수 있다.
접근성 변경
- 일반적으로 클래스 외부에서 액세스할 수 없는 비공개 메서드와 필드에 엑세스할 수 있다.
주의점
리플렉션을 사용하면 잠재적인 보안 위험과 성능 오버헤드가 발생할 수 있으므로 신중하게 사용해야 한다.
반응형
'Java > 자바 잡지식' 카테고리의 다른 글
자바 레코드 (Record) 란 무엇일까? (0) | 2023.12.01 |
---|---|
자바 예외의 종류와 특징 (0) | 2023.10.08 |
자바의 ThreadLocal 이란? (0) | 2023.06.23 |
자바 Stream 에 size() 혹은 length 프로퍼티가 없는 이유 (0) | 2023.03.31 |
자바 함수형 인터페이스 혹은 람다 인터페이스란? (0) | 2023.03.29 |