[Spring]BeanUtils.copyProperties를 사용해보자

Hyo·2021년 2월 10일
1

spring

목록 보기
1/1

블로그 이전

https://kdhyo98.tistory.com/28

BeanUtils.copyProperties ?

스프링에서 기본으로 제공해주는 메소드로서 객체를 쉽고 간결하게 복사할 수 있게 해준다.
org.springframework.beans.BeanUtils;

언제 사용하지?

예를들어 객체를 수정하기 위해 파라미터로 값을 받았을 때 필드가 많으면 많을 수록 setter의 횟수가 늘어나고 코드의 길이도 늘어나기 때문에 가독성과 소요시간이 떨어지게 됩니다. 이때 BeanUtils.copyProperties 메소드를 통해 한줄로 해결할 수 있습니다.
또한, 그대로 복사하지 않고 변경하지 않은 것들을 선택해서 원하는 것만 복사하고 싶을 때에도 사용하면 좋습니다.

사용방법

copyProperties(Object source, Object target)
source - 원본 객체
target - 복사 객체

setter

copy

위처럼 여러줄의 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로 되어있는 것으로 보아
조금은 다른 기능이 있는 것 같습니다.

자세히 크게 다른 점은 아직 확인해보지 못했지만,
성능에서는 아파치가 스프링에 비해 느리다고 보여집니다.
(참조)

profile
생각중..🤔🤔🤔

0개의 댓글