자바(Java)/JAVA 2SE

java.lang.reflect 패키지 - 클래스와 객체의 정보 취득

본클라쓰 2009. 1. 22. 02:47

 

 클래스와 객체에 관한 리플렉트 정보를 취득하는 클래스 및 인터페이스를 제공하는 패키지이다. 리플렉트 패키지는 클래스의 정보를 알고자 할때 사용하는 패키지이다.

 
 

java.lang.reflect 패키지 클래스들

Filed 클래스

클래스 또는 인터페이스에 대한 정보, 그것들에의 동적인 액세스, 그 단일 필드를 제공합니다.

 

Method 클래스

클래스 또는 인터페이스 상의 단일의 메소드에 관한 정보와 그 엑세스를 제공합니다.

 

Modifier 클래스

클래스나 맴버의 액세수 수식자를 복호화하기 위한 static 메소드나 정수를 제공합니다.

 

 

java.lang.reflect 패키지 

/*
 * 제     목 : reflect 패키지사용 예제
 * 작성일 : 2009. 1. 20
 * reflect 클래스는 클래스의 정보(슈퍼클래스명, 멤버메소드, 멤버 변수등)를 갖는 클래스
 */
import java.awt.Button;
import java.lang.reflect.*;
import java.lang.*;

 

class Simulator { 
 
    public static void getMemberFeilds(Object o) {

 
        Class c = o.getClass();

        Field []f = c.getFields();          
  
        System.out.println("맴버변수의 수 : " + f.length);
  

        for(int i = 0; i < f.length ; i++){
            String s1 = f[i].getType().toString();      

            String s2 = f[i].getName();                        
            System.out.println(s1 +" "+ s2);
        }
    }
 
    /** 멤버 메소드를 얻어 화면에 출력 */
    public static void getMemberMethods(Object o) {

 
        Class c = o.getClass();

 

        // Method 클래스의 getMethods() 메소드를 사용하여 메소드정보를 얻어 배열로 저장

        Method []m = c.getMethods();         
        System.out.println("\n맴버변수의 수 : " + m.length);
  
        for(int i = 0 ; i < m.length ; i++){
            String s2 = m[i].toString();
            System.out.println(s2);
        }
    }
 
    /** 슈퍼클래스명과 클래스 이름을 출력 */
    static void getNameSuperClass(Object o) { 

 
        Class c = o.getClass();
        String s = c.getName()
        String s1 = c.getSuperclass().toString();           // 슈퍼클래스의 이름을 문자열로 저장
  
        System.out.println("클래스 이름 : " + s + "\n" + "슈퍼클래스 이름 : " + s1 + "\n");
     
 }
 
    public static void main(String[] args) { 

 
        Button b = new Button();       // 버튼 클래스 속성을 알아보기 위해 버튼 클래스를 생성
        getNameSuperClass(b);
        getMemberFeilds(b);
        getMemberMethods(b);
    }
  
}