Data
@Data는 Lombok에서 제공하는 어노테이션이다.
한 줄로 여러 기능을 자동으로 생성해 준다.
@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor포함된 기능
@Getter: 모든 필드의 getter 생성@Setter: 모든 필드의 setter 생성@ToString: toString() 메서드 생성@EqualsAndHashCode: equals(), hashCode() 메서드 생성@RequiredArgsConstructor: final 필드 또는 @NonNull 붙은 필드 생성자 생성
왜 @Data 를 쓰면 안좋은가?
1.모든 필드에 대해 Getter/Setter 생성
캡슐화 원칙에 어긋난다.
-Setter는 객체를 언제든지 변경할 수 있는 상태로 만들기에 객체의 안정성을 보장받기 어렵다.
예를 들어 id의 필드가 변경을 허용치 않기로 했다면 setter도 없어야 안정성이 보장된다. 하지만 @Data를 사용하면 id 필드도 setter가 생성되기 때문에 안정성을 보장 받을 수 없게 된다
2.무분별한 toString() 생성
@ToString이 자동으로 생성디는데
JPA 연관관계가 (@ManyToOne, @OneToMany)가 있을 경우, 무한루프 발생 할수 있음
3.무분별한
equals()&hashCode()생성엔티티의 식별자인
id가 아직 할당되지 않은 상태에서 비교가 되면, 영속성 컨텍스트에서 문제가 발생할 수 있음@Data의 올바른 사용법
필요한 어노테이션만 명시적으로 쓰면 된다.
@Getter @NoArgsConstructor @AllArgsConstructor @Builder @Entity public class User { private Long id; private String name; // setter가 필요 없는 경우 생략 }
필요하다면 개별 필드에만 @Setter 추가하면 된다.
'스프링' 카테고리의 다른 글
| Spring Validation 완전 정복 - 올바른 유효성 검증 전략 (0) | 2026.01.29 |
|---|---|
| 스프링에서 스코프(Scope)란 무엇인가? (0) | 2026.01.19 |
| 스프링을 스프링답게 만드는 진짜 이유: IoC·AOP·PSA 삼각형의 정체 (0) | 2026.01.18 |
| 스프링 배치란? (0) | 2025.12.11 |
| @Data 사용을 지양해야 하는 이유 (0) | 2025.04.21 |