package reflection.data;
public class User {
private String id;
private String name;
private Integer age;
public User() {
}
public User(String id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
package reflection;
import reflection.data.User;
import java.lang.reflect.Field;
public class FieldV2 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
User user = new User("id1", "userA", 20);
System.out.println("기존 이름 = " + user.getName());
Class<? extends User> aClass = user.getClass();
Field nameField = aClass.getDeclaredField("name");
// private 필드에 접근 허용, private 메서드도 이렇게 호출 가능
nameField.setAccessible(true);
nameField.set(user, "userB");
System.out.println("변경된 이름 = " + user.getName());
}
}
- 리플렉션은 주로 테스트나 라이브러리 개발같은 특별한 상황에서 유용하게 사용되지만, 일반적인 애플리케이션 코드에서는 권장되지 않는다.
'개발이 좋아서 > Java가 좋아서' 카테고리의 다른 글
리플렉션 - 생성자 탐색과 객체 생성 (0) | 2024.12.01 |
---|---|
리플렉션 - 활용 예제 (0) | 2024.12.01 |
리플렉션 - 메서드 탐색과 동적 호출 (0) | 2024.12.01 |
리플렉션 - 클래스와 메타데이터 (0) | 2024.12.01 |
HTTP 기본 이론(간단 요약) (1) | 2024.12.01 |