반응형
Reflection 이란?
자바에서 메서드를 사용할때 대부분 구체적인 메서드를 가지고 개발을 하지만
동적으로 작업을 하던가, 구체적인 클래스 타입을 알지 못하더라도
해당 클래스의 메서드, 타입, 변수들에 접근을 해주는 자바 API 이다.
디버깅 단계에서가 아닌 런타임 시에 클래스를 가져오는 경우 해당 API를 자주 사용하게 된다.
예제는 아래와 같다.
class Member { String id; Member() { this.id = "name"; } Member(String id) { this.id = id; } int getId() { return this.id; } } |
이렇게 Member 클래스가 존재한다.
생성자 찾기
getDeclaredConstructor()를 이용해 클래스로부터 생성자를 가져올수 있다.
인자가 없는 생성자를 가져오게 된다.
Class c = Class.forName("Member"); Constructor constructor = c.getDeclaredConstructor(); |
Method 찾기
Class c = Member.class; Method[] methods = c.getDeclaredMethods(); System.out.println(methods[0].invoke(c.newInstance())) |
Field 변경
Class c = Member.class; Field[] field = c.getDeclaredFields(); System.out.println(field[0]); |
받아온 객체 값 가져오기(inDtoObject 내에서)
public static String convertParameter(Object obj) throws IllegalAccessException { for (Field field : obj.getClass().getDeclaredFields()) { field.setAccessible(true); Object value = field.get(obj); } |
Field 가져오기(set 한것)
Class c = Member.class; Field[] field = c.getDeclaredFields(); Member m = new Member(); field[0].set(id, "name"); System.out.println(field[0].get(m)); |
반응형
'IT > Java' 카테고리의 다른 글
reflection 를 통해 MapToObject 만들기 (36) | 2023.04.10 |
---|---|
Spring security 설정으로 인한 401 Unauthorized 에러 (28) | 2023.04.07 |
[error] javassist.tools.web.Webserver <port number> (33) | 2023.04.02 |
java 에서 switch 문 (26) | 2023.03.30 |
ApplicationContext(스프링 컨테이너) (27) | 2023.03.28 |
댓글