티스토리 뷰

반응형

 

 

 

 



 

 

SpringBoot

 

 

 

리플렉션(Reflection) 을 사용하면 런타임 시점에 해당 클래스의 내부를 들여다 볼 수 있다.

 

클래스의 내부를 들여다 볼 수 있는 보안상의 이유로 코드작성을 지양하고는 있지만...

동적인 필드를 처리해야 하는 상황에서는 쉽게 접근 할 수 있는 방법이기도 하다.

 

 

 

사용자단에서 동적 key 를 가지는 Object 를 받아 

엔티티 값을 set 해야 하는 상황이 생겨

여러 방법이 떠올랐으나 심플하게 적은코드로 처리 할까 하다가

리플렉션으로 처리하기로 했다.

 

 

데이터는 아래와 같이 동적 Object 형태로 만들어져 넘어왔다.

 

 

 

[Javascript] Object 동적으로 key 값 지정하기.

일반적으로 javascript 에서 Object 를 생성하는 방법은 아래와 같다. let obj = new Object(); obj.key = value; let obj = { key : value } let obj = new Object(); obj.name = "park"; let obj = { name : "park" } console.log(obj); // { name:"par

jong-bae.tistory.com

 

{ 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 인자를 사용하시면 됩니다.

 

 

 

 

 

더 심오한 리플렉션은 다시 제가 사용하게 되면 게시해보도록 하겠습니다.

 

 

 

 

 

 



 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday