Reflection

최승아·2021년 11월 3일
0

자바의 리플랙션이란 ?

자바의 리플렉션 정의

  • 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 수 있고 메소드를 호출할 수도 있음.
  • 자바에서 기본적으로 제공하는 API 입니다.

리플랙션을 통해 가져 올 수 있는 정보

  • Class
  • Constructor
  • Method
  • Field

자바 리플랙션 - Class 가져오기

예시 1

  • 위 예제에서 String 타입으로 클래스를 탐색해서 선언하는 게 가능
  1. String의 값은 컴파일 단계에서 체크 안함 / 위 예제에서 toString을 재정의하는 것으로 캐스팅도 필요없이 toString으로 콘솔 출력 가능
  2. 즉, Example 클래스 내부에서는 Node 함수를 사용하는 것이 없으므로 컴파일할때, Node 클래스를 만들지 않아도 생성 가능
  3. 즉, 실행할 때만 Node 클래스가 있으면 되고 동적바인딩이 가능

예시 2

  • Reflection 쓰기 전

=> 🔎문제점 : 여기에 들어가는 클래스가 사양에 따라 증가한다면 getClass의 if문은 점점 늘어날 것

  • Reflection 쓴 후

=> class name을 받아와서 객체를 인스턴스화 해서 return 해준다

Reflection 문제점

  • Reflection 느림 => Class.forName과 getConstructor 탐색을 하는 시간이 들기 때문
  • 에러가 컴파일에 걸리지 않음 Reflection은 실행하지 않는 이상 에러를 잡아 낼 수가 없음 ! 즉, 확실하게 검증되는 소스가 아니라면, 또 빈번하게 수정되는 소스라면 매우 불편한 기능

Reflection 언제 쓰이는지

  • Reflection 기능은 보통 Unit 테스트 환경이나 Framework를 만들 때, 의존성 주입을 설계할 때 많이 사용되는 기능

참조 : 1. Java - Reflection 쉽고 빠르게 이해하기 | By JS | October 14, 2019 | 출처 : https://codechacha.com/ko/reflection/
2. [Java] 29. Reflection 기능을 사용하는 방법 - Class편
출처: https://nowonbun.tistory.com/518 [명월 일지]

profile
⭐ 개발 정리 공간 ⭐

0개의 댓글