728x90
란?
Java Reflection 이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말함.
Runtime 시에 Class, Interface, Field 및 method 에 대한 정보를 동적으로 가져오고 조작할 수 있는 기능을 의미함.
사용
- 클래스 정보 얻기
Class 의 이름, Super Class, Interface, Field, Method 목록 등을 가져올 수 있음. - 객체 생성
Class 의 생성자를 호출하여 객체를 생성할 수 있음. - Field 및 method 접근
객체의 필드값을 가져오거나 설정하고, 메소드를 호출할 수 있음. - 동적 클래스 로딩
런타임에 존재하지 않는 클래스를 동적으로 로드하고 사용할 수 있음.
어떨 때 사용해야함?
Java 에서 런타임 시 동적으로 코드를 분석하고 수정해야 하는 경우에 유용함.
외부 라이브러리나 프레임워크와 상호 작용하거나 특정 클래스의 인스턴스를 생성할 때 사용될 수 있음.
특징
- 동적 분석 및 조작
Reflection 을 사용하면 실행 중인 Java 애플리케이션의 구조를 동적으로 조사하고 조작할 수 있음. - 런타임 접근
클래스의 메타데이터에 런타임에 접근하여 타입 정보를 가져오거나, 객체를 생성하고 메서드를 실행할 수 있음.
Class c = Data.class;
Method[] m = c.getMethods();
Field[] f = c.getFields();
Constructor[] cs = c.getConstructors();
Class[] inter = c.getInterfaces();
Class superClass = c.getSuperclass();
- 유연성
코드를 작성할 때 구체적인 클래스 타입을 명시하지 않고도 작업을 수행할 수 있어 유연성이 높아짐.
- API의 일부임
java.lang.reflect 패키지로 제공되며, Java 의 핵심 부분으로 통합되어 있음.
장점
- 확장성
이미 컴파일된 애플리케이션에 새로운 기능을 동적으로 추가할 수 있음.
ex) 사용자 정의 클래스를 로딩하고 인스턴스화 하는 플러그인 시스템에 유용함. - 유연한 코드 작성
컴파일 타임에 알려지지 않은 클래스와 상호작용할 수 있어, 제네릭 프로그래밍을 보다 유연하게 활용할 수 있음. - 디버깅과 테스팅 도구
개발 중에 내부 상태를 검사하고 문제를 진단하는 데 필요한 테스팅 및 디버깅 도구를 구축하는데 유용함.
단점
- 성능저하
Reflection 은 일반적인 메서드 호출이나 접근보다 훨씬 느릴 수 있음. 런타임에 타입 검사와 메서드 호출을 수행하기 때문에 추가적인 오버헤드가 발생함. - 보안위험
Reflection 을 사용하면 보안 매니저에서 제한하는 작업을 우회할 수 있어 보안에 취약점을 만들 수 있음. - 복잡성 증가
Reflection 코드는 분석 및 디버깅이 어려울 수 있으며, 코드의 가독성과 유지관리성을 저하시킬 수 있음. - 컴파일 타임 검사 부재
Reflection 을 사용하는 코드는 컴파일 타임에 타입 안정성을 제공하지 못하며, 런타임 오류의 가능성을 증가시킴
728x90
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 13일차 TIL Checked & UnChecked Exception (0) | 2024.04.30 |
---|---|
99클럽 코테 스터디 12일차 TIL Generic (0) | 2024.04.29 |
99클럽 코테 스터디 10일차 TIL Wrapper Class 와 Boxing & UnBoxing (1) | 2024.04.27 |
99클럽 코테 스터디 9일차 TIL Set (1) | 2024.04.26 |
99클럽 코테 스터디 8일차 TIL Map (1) | 2024.04.25 |
Comment