웹 개발

java reflection을 통해 class의 setter method를 호출하는 방법

노루아부지 2021. 12. 13. 22:26
try {
  User user = new User();
  Method method = User.class.getDeclaredMethod("setName", String.class);
  method.setAccessible(true);
  method.invoke(user, "Some name");
  
  System.out.println("user.getName() = " + user.getName());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
    e.printStackTrace();
}

 

위 코드의 핵심은 method.setAccessible(true); 입니다. setAccessible()은 필드나 메서드의 접근제어 지시자에 의한 제어를 변경합니다.

 

일반적으로 private 인스턴스 면수나 메서드는 해당클래스의 외부에서는 접근할 수 없습니다. 이때 setAccessible(true);를 사용하면 문제없이 접근할 수 있게 됩니다.

단, 이 방법은 reflect를 통한 필드나 메서드 접근에 한하며 접근연산자(.)를 통한 방식은 불가능합니다.

728x90
loading