[java] 리플렉션을 이용한 자바 빈 사용하기

리플렉션(reflection)은 런타임 시에 클래스의 정보를 분석하고, 필드나 메서드를 동적으로 다룰 수 있게 해주는 기술입니다. 자바 빈(JavaBean)은 특정 목적을 가지고 있는 재사용 가능한 소프트웨어 구성 요소로, 특정 규약에 따라 작성된 클래스입니다. 이 두 기술을 결합하여 자바 빈을 동적으로 활용할 수 있습니다.

자바 빈 개념

자바 빈은 아래와 같은 특성을 가지고 있습니다.

자바 빈을 리플렉션을 이용해 동적으로 다루는 방법은 다음과 같습니다.

리플렉션을 이용한 자바 빈 사용하기

아래는 리플렉션을 사용하여 자바 빈의 필드 값을 얻고 설정하는 간단한 예제 코드입니다.

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class BeanReflectionExample {
    public static void main(String[] args) throws Exception {
        // 대상이 되는 자바 빈 객체 생성
        UserBean user = new UserBean("John Doe", 30);

        // getClass를 이용해 런타임에 객체의 클래스 정보 가져오기
        Class<?> userClass = user.getClass();

        // 클래스 이름 출력
        System.out.println("Class name: " + userClass.getName());

        // 클래스에 선언된 필드들에 접근
        Field[] fields = userClass.getDeclaredFields();
        for (Field field : fields) {
            System.out.println("Field name: " + field.getName());

            // getter 메서드 호출
            Method getter = userClass.getMethod("get" + capitalize(field.getName()));
            System.out.println("Field value: " + getter.invoke(user));
        }
    }

    // 첫 문자를 대문자로 변환하는 유틸리티 메서드
    public static String capitalize(String str) {
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }
}

class UserBean {
    private String name;
    private int age;

    public UserBean(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

위 예제에서는 UserBean 클래스의 필드에 리플렉션을 이용해 접근하고, getter 메서드를 호출하여 필드 값에 접근합니다. 이를 통해 런타임에 동적으로 객체를 다룰 수 있는 것을 확인할 수 있습니다.

리플렉션을 이용하면 자바 빈의 필드나 메서드를 정적으로 정의하지 않고도 동적으로 다룰 수 있어, 다양한 상황에서 유연한 프로그래밍을 할 수 있다는 장점이 있습니다.

결론

리플렉션을 이용하여 자바 빈을 동적으로 다룰 수 있어, 프로그램의 유연성을 높일 수 있습니다. 다만, 리플렉션은 성능 저하와 보안 문제에 대한 고려가 필요하므로 신중하게 사용해야 합니다.

이상으로 자바 빈과 리플렉션을 이용한 동적 객체 생성에 대해 알아보았습니다.

Java 리플렉션 문서를 참고하면 더 많은 정보를 얻을 수 있습니다.