Reflection 클래스 정보
Java에서 제공하는 Relfection API를 통해 동적으로 클래스에 관련된 정보를 가져올 수 있다.
* Class 클래스 주요 메소드
String getName() : 패키지 포함 해당 클래스명 리턴
String getSimpleName() : 해당 클래스명 리턴
String getSimpleName() : 해당 클래스명 리턴
Field[] getFields() : public으로 선언된 변수 목록 리턴
Field[] getDeclaredFields() : 해당 클래스에 선언된 모든 변수 리턴
Method[] getMethods() : public으로 선언된 메소드 목록 리턴(해당 클래스에서 사용 가능한 상속 받은 메소드 포함)
Method[] getDeclaredMethods() : 해당 클래스에 선언된 모든 메소드 리턴
Constructor[] getDeclaredConstructors() : 해당 클래스에 선언된 모든 생성자 리턴
int getModifiers() : 해당 클래스의 접근자 정보 리턴
String toString() : 해당 클래스 객체를 문자열로 리턴
* Method 클래스 주요 메소드
String getName() : 해당 메소드명 리턴
int getModifiers() : 해당 메소드의 접근자 정보 리턴
String toString() : 해당 메소드 정보 리턴
Object invoke(Object obj, Object... args) : 해당 메소드 수행
Class<?> getDeclaringClass() : 해당 메소드가 선언된 클래스 정보 리턴
Class<?> getReturnType() : 해당 메소드 리턴 타입 리턴
Class<?>[] getExceptionTypes() : 해당 메소드 예외 타입들 리턴
Class<?>[] getParameterTypes() : 해당 메소드 매개변수 타입들 리턴
* Field 클래스 주요 메소드
String getName() : 해당 변수명 리턴
int getModifiers() : 해당 변수의 접근자 정보 리턴
String toString() : 해당 변수 정보 리턴
Modifier.toString(int modifier) : int 타입으로 리턴받은 modifier 값을 문자열로 리턴
* 참고사항
- 로그 선언시 클래스 이름을 알아내기 위해 this.getClass().getName() 사용한다고 성능이 크게 저하되지는 않는다.
하지만 클래스 객체를 얻는 방법 보다는 클래스명을 직접 명시하는 것을 권장한다.
- 클래스의 이름으로 해당 객체의 타입인지 비교하는 방법 보다 instanceof 키워드를 사용하는 것이 성능이 우수하다.
- 클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장된다.
Class 클래스를 사용하여 많은 양의 클래스를 동적으로 생성하면 Perm 영역을 더 이상 사용할 수 없게 되어 OutOfMemoryError가 발생한다.
참고서적 - 자바 성능 튜닝 이야기
'Development > Java' 카테고리의 다른 글
Garbage Collection 과정 (0) | 2018.04.28 |
---|---|
Garbage Collection 용어 정리 (0) | 2018.04.26 |
AES256 암호화 오류 해결 (4) | 2017.10.06 |
반복문 성능 비교 (0) | 2017.07.27 |
List 중복 제거 (0) | 2017.07.13 |