@Data 주의 사항
@Data 어노테이션이란
다음은 Formatter를 이용하는 예시 중 하나이다.
@Data
public class FormatForm {
@NumberFormat(pattern = "#,###.##")
private BigDecimal price;
@DateTimeFormat(pattern = "dd-MM-yyyy")
private LocalDate orderDate;
}
@Data 어노테이션은 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한꺼번에 적용하는 어노테이션이다. 해당 코드는 이러한 @Data를 이용해 많은 어노테이션을 호출하였다. 그러나 해당 예시는 운영코드에서 사용하지 않는 것이 좋다고 한다. 그 이유는 @Data의 포함되어 있는 @Setter에 있다.
@Setter는 외부에서 필드의 값을 변경하기 위해 사용하기 때문에, Setter를 사용하게 되면 값의 일관성을 유지하기 어렵고, 원하지 않는 값이 들어가는 경우가 발생할 수도 있다.
그렇기에 @Data를 이용하려면 다음과 같은 규칙을 따르는 것이 좋다.
1. Entity에서는 사용하지 않는다.
2. DTO에서만 사용한다.(Setter는 DTO 내부 메서드에서만 사용한다.)