티스토리 뷰

Language/Java

Reflection class

mnm11 2018. 6. 1. 04:34

Reflection 관련 클래스들

Class 클래스

메소드 이름 내용
String getName() 클래스의 이름을 리턴
Package getPackage() 클래스의 패키지 정보를 패키지 클래스 타입으로 리턴
Field[] getFields() public으로 선언된 변수 목록을 Field 클래스 배열 타입으로 리턴
Field getField(String name) public으로 선언된 변수를 Field 클래스 타입으로 리턴
Field[] getDeclaredFields() 해당 클래스에서 정의된 변수 목록을 Field 클래스 배열 타입으로 리턴
Field[] getDeclaredFiled(String name) name과 동일한 이름으로 정의된 변수를 Field 클래스 타입으로 리턴
Method[] getMethods() public으로 선언된 모든 메소드 목록을 Method 클래스 타입으로 리턴합니다. 해당 클래스에서 사용 가능한 상속받은 메소드도 포함됩니다.
Method getMethod(String name, Class… parameterTypes) 지정된 이름과 매개변수 타입을 갖는 메소드를 Method 클래스 타입으로 리턴
Method[] getDeclaredMethods() 해당 클래스에서 선언된 모든 메소드 정보를 리턴
Method getDeclaredMethod(String name, Class… parameterTypes) 지정된 이름과 매개변수 타입을 갖는 해당 클래스에서 선언된 메소드를 Method 클래스 타입으로 리턴
Constructor[] getConstructors() 해당 클래스에 선언된 모든 public 생성자의 정보를 Constructor 배열 타입으로 리턴
Constructor[] getDeclaredConstructors() 해당 클래스에 선언된 모든 생성자의 정보를 Constructor 배열 타입으로 리턴
int getModifiers() 해당 클래스의 접근자(modifier) 정보를 int 타입으로 리턴
String toString() 해당 클래스 객체를 문자열로 리턴
  • 현재 클래스의 이름이 알고 싶다면 다음과 같이 사용하면 됩니다.
[ 패키지 정보까지 포함 ]  
String currentClassName = this.getClass().getName();  
  
[ 클래스 이름만 필요한 경우 ]  
String currentClassName = this.getClass().getSimpleName();  

Method 클래스

메소드 이름 내용
Class<?> getDeclaredClass() 해당 메소드가 선언된 클래스 정보를 리턴
Class<?> getReturnType() 해당 메소드의 리턴 타입을 리턴
Class<?>[] getParameterTypes() 해당 메소드를 사용하기 위한 매개변수의 타입들을 리턴
String getName() 해당 메소드의 이름을 리턴
int getModifiers() 해당 메소드의 접근자 정보를 리턴
Class<?>[] getExceptionTypes() 해당 메소드에 정의되어 있는 예외 타입들을 리턴
Object invoke(Object obj, Object… args) 해당 메소드를 수행합니다.
String toGenericString() 타입 매개변수를 포함한 해당 메소드의 정보를 리턴
String toString() 해당 메소드의 정보를 리턴

Field 클래스

메소드 이름 내용
int getModifiers() 해당 변수의 접근자 정보를 리턴
String getName() 해당 변수의 이름을 리턴
String toString() 해당 변수의 정보를 리턴

Reflection 클래스 활용

[ A 경우 ]  
public String checkClass(Object obj) {  
   if (obj.getClass().getName().equals("java.math.BigDecimal")) {
      ... 
   }
}  
  
[ B 경우 ]  
public String checkClass(Object obj) {  
   if (obj instanceof java.math.BigDecimal) { 
      ... 
   }
}  
  • reflection 클래스를 활용해야 한다면 A보다 B 경우를 사용하도록 하자. (성능상 B 경우가 6배 빠릅니다.)

추가적으로, 클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장됩니다. 만약 Class 클래스를 사용하여 많은 클래스를 동적으로 생성하는 일이 벌어지면 Perm 영역이 더 이상 사용할 수 없게 되어 OutofMemoryError가 발생할 수 있습니다.

'Language > Java' 카테고리의 다른 글

Synchronized  (0) 2018.06.01
Thread Class & Runnable Interface  (0) 2018.06.01
Process & Thread  (0) 2018.06.01
IO  (0) 2018.06.01
Static  (0) 2018.06.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함