[Java] Java Reflection API

cateto·2021년 1월 12일
0
post-thumbnail

자바의 멤버변수, 전역변수, "필드(field) 변수" 라는 용어 여기서 써먹는구나.

리플렉션이란?

객체를 통해 클래스의 정보를 분석한다.
자바에서는 동적으로 객체를 생성할 수 없다.
대신, Reflection으로 그 역할을 대신한다.

리플렉션으로 뭘 할 수 있을까?

  1. 클래스에 정의된 메서드 찾기 (정의된 것 / 상속된 것..)
  2. 생성자에 대한 정보 얻기
  3. 필드 찾기
  4. 이름으로 메서드 실행하기
  5. 새로운 객체 만들기
  6. 필드 값을 가져오기, 바꾸기
  7. 배열 사용하기

리플렉션에 대해 고민할것?

  1. 느리다.
  2. 에러가 발생하기 쉽고 디버깅이 어렵다.
  3. 코드가 복잡하다. 유지보수의 문제..
  4. 캡슐화의 기능을 약화시킬 수 있다.
  5. 보안으로 인한 제한 사항이 있다.

언제 쓰면 좋을까?

  • 런타임에 존재하지 않을 수 있는 다른 클래스, 메서드, 필드와의 의존성을 관리할 때 사용한다.예를 들어, 버전이 여러개 존재하는 패키지를 다룰 때 - 가장 오래된 버전을 지원하도록 컴파일 한 후 이후 버전은 리플렉션으로 접근하는 방식이다.
  • 커스텀 annotation을 만들때..!
  • 스프링(Spring)에서 DI(의존성 주입)에 활용됨
  • 하이버네이트(Hibernate)에서 Setter가 없으면 reflection으로 값을 설정.
  • JUnit에서 @Test 어노테이션이 붙은 메소드를 찾을 때 사용됨.

참고 :
https://ktko.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98Reflection-%EC%82%AC%EC%9A%A9
(리플렉션 사용 예제 포함)
https://velog.io/@eversong/Effective-Java-65.-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC
(Effective java 정리 참고 내용)

profile
Curious for Everything

0개의 댓글