본문 바로가기

Programming/JAVA

[java] DTO등 객체의 property에 손쉽게 data set하는 유틸이 있네요.

제목에서 말하는 유틸클래스는 바로 PropertyUtils 라는클래스입니다.

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/PropertyUtils.html

위 링크를 따라가시면 해당 클래스에 대한 document가 있습니다.


저는 어떤 경유에 저걸 쓰게 되었냐면;;;

client 에서 넘어온 json data를 바로 객체로 생성하려하는 데에 마땅한걸 찾기가 쉽지 않더라구요;;

사실 mkyoung 라는 엄청나게 많은 튜토리얼을 제공하는 블로그에서 얼핏 

jackson 이라는 json 라이브러리를 보긴 했으나 무심코 지나갔죠 ㅠㅠ

그리고 잘못된 키워드 검색으로 json-simple에 목매달게 되었는데 제가 잘 못쓰는건지... 제공을 안하는건지

원하는게 나오지 않더라구요. ㅠ

(client에서는 객체화하려는 클래스에 mapping되도록 key:value 들을 묶음으로 리스트로 보내오거든요,

 그래서 그 하나의 묶음이 하나의 객체로 생성해야했으며 또한 이 객체들은 리스트로 담아야 했죠 ㅠㅠ)


여튼 위와 같은 상황에서 객체 생성해서 data를 set하지 못하다보니 생각한게 reflection 이었죠.

근데 이 작업이 무척 귀찮아지려는 즈음에 저 유틸클래스를 찾았습니다.

사용법은 엄청 간단합니다.



class Human{ private byte age; private String name; } public class Test{ public static void main(String[] args){ Human human = new Human(); byte age = 29; String name = "munsu"; PropertyUtils.setProperty(human, "age", age); // set : age = 29 PropertyUtils.setProperty(human, "name", name); // set : name = "munsu" } }


위처럼 쓰시면 되겠습니다.

개인적으로 String을 객체화하거나 immutable 객체를 접근할때 엄청나게 유용하겠다는 생각이 드네요.

(물론 필요에 의해서 저 메소드만 작업해봤기에;;; 다른 기타 기능도 어서 살펴봐야겠네요 ㅡㅡ;;;)



....

검색해보니 bindgen 이라는 유틸이 또 있네요.

성능은 propertyUtil 을 쓰는 것보다 훨씬 좋게 나오는 것 같아요.

(단순히 동적으로 클래스를 찾아서 property를 binding할거라면 말이죠.

이 부분은 아직 구현도 안해봤으나 혹시나 제 블로그를 보시고

PropertyUtil 을 사용하시는 분이 계실까 미리 알려드립니다.)

http://bindgen.org/performance.html


위의 문구는 다시 생각해봐야겠네요.

사용목적이 어디에 있느냐에 따라 얘기가 달라지지 않나 싶네요.

뭔가 판단하기엔 미천한 제 실력이 원망스럽네요 ㅠㅠㅠ

일단 제 플젝에는 아파치에서 제공하는 PropertyUtils 를 적용하고 있어야겠습니다ㅠㅠ