728x90
반응형
- 첫 작성일 : 21년 2월 11일 velog 블로그
BeanUtils.copyProperties ?
스프링에서 제공해주는 메소드로서 객체를 쉽고 간결하게 복사할 수 있게 해준다.
언제 사용하지?
예를들어 객체를 수정하기 위해 파라미터로 값을 받았을 때
필드가 많으면 많을 수록 setter의 횟수가 늘어나고 코드의 길이도 늘어나기 때문에
가독성과 소요시간이 떨어지게 됩니다.
이때 BeanUtils.copyProperties 메소드를 통해 한줄로 해결할 수 있습니다.
또한, 그대로 복사하지 않고 변경하지 않은 것들을 선택해서
원하는 것만 복사하고 싶을 때에도 사용하면 좋습니다.
사용방법
copyProperties(Object source, Object target)
source - 원본 객체
target - 복사 객체
위처럼 여러줄의 setter를 한 줄로 복사할 수 있습니다.
훨씬 가독성 좋은 것 같습니다.
ignore 설정
copyProperties(Object source, Object target, String... ignoreProperties)
source - 원본 객체
target - 복사 객체
ignoreProperties - 복사하지 않을 필드명들
위처럼 3번째 파라미터부터는 갯수의 상관 없이 복사하지 않을 필드명을 설정할 수 있습니다.
업무에서 적용 경험 후기
실제로 무분별한 setter 사용으로 코드가 길어지는 경험을 많이 한 이후에
이 메소드를 알게 되어서 꽤 자주 사용하면서 코드 간결해지는걸 보면서 기분이 좋았던 것 같습니다.
하지만, 너무 무분별한 사용은 성능상 좋지 않으며,
setter와 builder 등 다양한 방법 중 상황에 맞게 사용하는 것이 가장 좋다고 느꼈습니다.
2021-06-09 추가사항
BeanUtils를 임포트할 때에는 조심히 해야한다.
org.springframework.beans.BeanUtils;
org.apache.commons.beanutils.BeanUtils;
이번에 BeanUtils을 사용하다가 값이 계속 없어지길래 확인해보니
임포트가 아파치로 되어 있었습니다..
springframework.beans.BeanUtils
copyProperties(Object source, Object target)
source - 원본객체
target - 복사객체
apache.commons.beanutils.BeanUtils;
copyProperties(final Object dest, final Object orig)
dest - 복사객체
orig - 원본객체
위처럼 복사객체와 원본객체가 반대로 되어 있습니다.
그런데 아파치버전을 확인해보면 final로 되어있는 것으로 보아
조금은 다른 기능이 있는 것 같습니다.
자세히 크게 다른 점은 아직 확인해보지 못했지만,
성능에서는 아파치가 스프링에 비해 느리다고 보여집니다.
(참조)
728x90
반응형
'JVM > Java' 카테고리의 다른 글
[Java] Map getOrDefault 를 활용하자. (0) | 2021.05.09 |
---|---|
[Java] ArrayList 조건 삭제 'removeIf' (0) | 2021.05.01 |
[Java]예외(Exception)관련 정리 (0) | 2021.04.17 |
[Java]String Format 사용법 (0) | 2021.04.17 |
[Java]Apache? Tomcat?? 둘이 무슨 차이지? (1) | 2021.04.17 |