티스토리 뷰
반응형
리플렉션(Reflection) 을 사용하면 런타임 시점에 해당 클래스의 내부를 들여다 볼 수 있다.
클래스의 내부를 들여다 볼 수 있는 보안상의 이유로 코드작성을 지양하고는 있지만...
동적인 필드를 처리해야 하는 상황에서는 쉽게 접근 할 수 있는 방법이기도 하다.
사용자단에서 동적 key 를 가지는 Object 를 받아
엔티티 값을 set 해야 하는 상황이 생겨
여러 방법이 떠올랐으나 심플하게 적은코드로 처리 할까 하다가
리플렉션으로 처리하기로 했다.
데이터는 아래와 같이 동적 Object 형태로 만들어져 넘어왔다.
{ a1 : 1 }
{ a5 : 0 }
...
아래와 같이 동적인 key 값을 set 메소드를 작성하였다.
public void setFields(Map<String, Object> param) {
for(String key : param.keySet()) {
try {
Field field = this.getClass().getDeclaredField(key);
field.setInt(this, (int) param.get(key));
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
Map<> 에 담겨있는 key 리스트들을 조회하면서
해당 클래스의 key 값과 같은 엔티티클래스 필드를 key 값이 가지고 있는 value 값으로 set 하는 코드이다.
자료형에 따라서 set 해주면 됩니다.
공용메소드로 사용하시려면 인자에 class<?> 담아서
this 대신 class 인자를 사용하시면 됩니다.
더 심오한 리플렉션은 다시 제가 사용하게 되면 게시해보도록 하겠습니다.
반응형
'Java > SpringBoot&Spring' 카테고리의 다른 글
[SpringBoot] H2 DB 연결해서 JPA 사용하기 (0) | 2024.03.20 |
---|---|
[Spring] @Autowired 지양하고 생성자를 사용하자. (0) | 2024.02.16 |
[Java] Optional의 ifPresent 활용하기 (1) | 2024.01.10 |
[SpringBoot] Jasypt로 프로퍼티 암호화하기. (0) | 2024.01.09 |
[Spring Security] 로그인 Form 인증 없이 컨트롤러에서 로그인 인증. (0) | 2023.12.19 |
댓글