[BE/JAVA] Reflection 개발방법 개념 및 샘플코드

2023. 5. 2. 13:25
728x90
반응형

Reflection(리플렉션)

1) 클래스, 인터페이스, 메소드, 필드 등의 정보를 동적으로 가져오고 수정할 수 있음

2) ReflectionAPI를 사용해 클래스와 객체에 대한 정보를 조회할 수 있음

3) 동적으로 객체를 생성하거나 메소드를 호출할 수 있음

4) 필드값을 가져오거나 값을 설정할 수 있음(필드 생성은 불가 / 상속을 통한 필드 추가는 가능)

 

 

java.lang.reflect.Field

1) Field 클래스는 Reflection API를 사용해 접근한 클래스 내의 필드를 나타냄

2) 접근한 클래스의 특정 필드의 정보를 가져오거나 동적으로 값을 수정하는데 사용

3) API

 i) getName(): 필드의 이름을 리턴

 ii) getType(): 필드의 자료형을 리턴

 iii) getModifiers(): 필드의 접근지정자를 리턴

 iv) get(인스턴스): 인스턴스에서 해당 필드의 값을 리턴

 v) set(인스턴스, 값): 인스턴스에서 해당 필드의 값을 설정

 

샘플코드

import java.math.BigDecimal;

public class ReflectDto {
	private String str01;
	private Integer int01;
	private BigDecimal bigDecimal01;

	public String getStr01() { return str01; }
	public void setStr01(String str01) { this.str01 = str01; }

	public Integer getInt01() { return int01; }
	public void setInt01(Integer str01) { this.int01 = int01; }

	public BigDecimal getBigDecimal01() { return bigDecimal01; }
	public void setBigDecimal01(BigDecimal bigDecimal01) { this.bigDecimal01 = bigDecimal01; }
}
import java.lang.reflect.Field;

public class Example {

    public static void main(String[] args) throws Exception {
        Field[] fields = Example.class.getDeclaredFields();
        ReflectDto dto = new ReflectDto();
    	try {
            for (Field field: fields) {
            	System.out.println("+----------------------------------------------------+");
            	System.out.println("+" + field.getModifiers() + " " + field.getType() + " " + field.getName());
                if (field.getType().equals(String.class)) {
                    field.set(dto, "스트링타입");
                } else if (field.getType().equals(Integer.class)) {
                    field.set(dto, 1);
                } else if (field.getType().equals(BigDecimal.class)) {
                    field.set(dto, new BigDecimal("0"));
                }
            }
        } catch(IllegalArgumentException iae) {
        	iae.printstackTrace();
        }

        System.out.println("+----------------------------------------------------+");
        System.out.println("+str01:        " + dto.getStr01());
        System.out.println("+int01:        " + dto.getInt01());
        System.out.println("+bigDecimal01: " + dto.getBigDecimal01());
        System.out.println("+----------------------------------------------------+");
    }
}
#Console
+----------------------------------------------------+
+2 class java.lang.String str01
+2 class java.lang.Integer int01
+2 class java.lang.BigDecimal bigDecimal01
+----------------------------------------------------+
+str01:        스트링타입
+int01:        1
+bigDecimal01: 0
+----------------------------------------------------+
728x90
반응형

BELATED ARTICLES

more