레퍼런스 코드 원본
사용 목적
Patch 엔티티에 null 값이 들어왔는지 일일히 필드 별로 확인하기 귀찮기 때문에 CustomBeanUtils를 사용했다. 하지만 엔티티에 Setter를 사용한다는 점이 거슬린다.
해결 방법
애초에 값이 null으로 들어왔는지 체크할 필요가 없도록 입력값에 필수를 두어 제한한다. 그리고 해당 입력값들에 대해서만 값 변경을 수행하면 된다.
사용자로부터 PatchDto를 전달 받을 때, 서비스 단에서 PatchDto에 null 필드가 있는지 확인할 필요가 없도록.
애초에 불변 객체처럼 사용한다면 Setter 사용을 줄일 수 있다.
정적팩토리메서드, 빌더패턴을 사용할 땐 생성자를 private 처리한다.
기본생성자 접근자를 protected로 변경해 외부에서의 new 연산자 사용을 막을 수 있어 객체의 일관성을 유지할 수 있다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) 으로 간단히 설정할 수 있다.