dto만들때 record or boilerplate code 둘중에 하나 무엇을 할까?

kihoo_ni·2024년 6월 19일

북스토어프로젝트

목록 보기
3/14
@Getter 
@AllArgsConstructor 
public class CouponPolicyResponseDTO { 
private BigDecimal minOrderPrice; 
private BigDecimal salePrice; 
private BigDecimal saleRate; 
private BigDecimal maxSalePrice; 
private String type; }

@Getter 
@NoArgsConstructor(access = AccessLevel.PROTECTED) 
public class CouponPolicyRequestDTO { 
private BigDecimal minOrderPrice; 
private BigDecimal salePrice; 
private BigDecimal saleRate; 
private BigDecimal maxSalePrice; 
private String type; }

현재 프로젝트에서 사용하고있는 dto들인데
해당구조를 그대로 사용할 것인지 아니면 java14에서 추가된 record 타입으로 바꿀것인지 조원들과 토의함.
위에 올라온 코드형식을 보일러플레이트코드(Boilerplate Code)라고 함.
간략하게 설명하면 최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드를 의미함.
따라서 코드가 길어지는 것을 방지하고 간략하게 하고싶다는 조원들의 의견에 따라 record로 하는 것을 결정했다.


record로 사용하면 이점은 다음과 같다.

  1. 해당 dto를 데이터를 위한 클래스라고 명시적으로 보여줄 수 있다는 점이다.
  2. 해당 필드에 대한 생성자를 자동생성 ( 해당필드가 전부들어간 생성자만 생성함, 기본생성자 혹은 인자값 여러개 조합생성자는 만들지 않음)
  3. Getter 메서드 자동으로 생성(data 전송 객체답게 setter는 만들지 않음).
  4. 필드를 기반으로 equals 메서드를 자동으로 생성.
  5. 필드를 기반으로 hashCode 메서드를 자동으로 생성.
  6. toString 메서드를 자동으로 생성.

위 코드들을 레코드형식으로 변환하면 다음과 같다.

public record CouponPolicyResponseDTO(BigDecimal minOrderPrice, BigDecimal salePrice, BigDecimal saleRate, BigDecimal maxSalePrice, String type) { }


public record CouponPolicyRequestDTO(BigDecimal minOrderPrice,
BigDecimal salePrice, BigDecimal saleRate, BigDecimal maxSalePrice, String type) { }

0개의 댓글