728x90
Reflection ?
- 구체적인 클래스 타입을 알지 못해 그 클래스의 메소드와 타입 그리고 변수들을 접근할 수 있도록 해주는 자바 API
- 즉, 구체적인 클래스 타입을 모를때 사용하는 방법
- Spring framework, Hibernate ORM, jackson Library 등에서 사용
장점
- 확장성 특징
- 애플리케이션은 정규화된 이름을 사용하여 확장성 객체의 인스턴스를 생성하여 외부 사용자 정의 클래스를 사용할 수 있다.
- 클래스 브라우저 및 시각적 개발 환경 제공
- 클래스 브라우저는 클래스으 Method, Property, Consturctor를 열거할 수 있어야 한다.
- 시각저인 개발 환경은 개발자가 올바른 코드를 작성하는데 도움이 되도록 Reflection에서 사용할 수 있는 형식 정보를 사용하면 도움이 된다.
- 디버거 및 테스트 도구
- 디버거는 개인 Property, Method, Constructor를 검수할 수 있어야 한다.
- 테스트 장치는 Reflectiojn을 사용하여 클래스에 정의된 발견 가능한 세트 API를 체계젹으로 호출하여 테스트에서 높은 수준의 코드 커버리지를 보장한다.
주의사항 및 단점
- 퍼포먼스의 오버헤드
- Reflection에는 동적으로 해석되는 유형이 포함되므로, 특정 JVM 최적화를 수행할 수 없다.
- 따라서 Reflection 작업이 성능이 떨어지고, 성능에 민감한 애플리케이션에서 자주 호출되는 코드엔 사용하지 않아야 한다.
- 보안 제헌 사항
- 시큐리티 매니저의 실행 시에 존재하지않는 실행 시 액세스 권한이 필요하다.
- 이것은 애플릿과 같이 제한된 보안 컨텍스트에서 실행되어야 하는 코드에 대한 주요한 고려 사항이다.
- 캡슐화를 저해
- private한 Property 및 Method에 엑세스한느 것과 같이 비Reflection 코드에서 작동하지 않는 코드를 수행할 수 있다. 그래서 Reflection을 사용하면 예기치 않은 부작용이 발생하여 코드 기능이 저하되고 이식성이 손상될 수 있다.
- Relfection은 추상화를 깨트려 플랫폼 업드레이드 시 동작이 변경될 수 있다.
-Reference
'자바 스터디' 카테고리의 다른 글
객체 지향 ( Object - Oriented ) (0) | 2022.06.03 |
---|---|
Generic, Raw Type, Generic Type Eraser (0) | 2021.11.24 |
GC ( Garbage Collection ) ? (0) | 2021.11.10 |
자바의 컴파일 과정과 JVM에서 HEAP의 변화 (0) | 2021.11.03 |
JVM( Java Virtual Machine ) 이란 (0) | 2021.10.27 |