[Spring Boot] @Data 알고 쓰기

2025. 11. 26. 23:37·Development/Back-end

@Data를 사용해야한다 vs @Data를 지양해야한다.

 

개발 블로그를 찾다보면 의견이 분분한 것을 볼 수 있다.

필자는 "필요한 어노테이션을 @Data 하나로 전부 사용할 수 있네?"하며 단순히 편리한 어노테이션이라 생각하고 사용했다.

 

그러다 우연히 한 블로그를 보게 되었다.

 

@Data

@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 합쳐놓은 lombok 어노테이션이다.

POJO와 bean과 관련된 모든 보일러 플레이트를 생성한다.

 

※POJO?

: Plain Old Java Object, 자바로 생성하는 순수한 객체를 의미한다.

 

사람들이 @Data를 지양하는 이유?

블로그를 찾아보니 대부분의 사람들이 @Data 사용을 지양하고 있었다.

여러 이유들을 아래 두 가지로 추렸다.

 

  • @Setter 존재
    • 외부에서 필드를 변경할 때 변경 목적을 제대로 파악하는 것이 중요하다.
    • setter를 사용한다면 의도가 불분명할 뿐만 아니라, 값의 일관성을 유지하기 어렵기 때문에 사이드 이펙트를 발생시킬 수 있다.

※ 사이드 이펙트란? 어떤 실행의 결과로 예상치 못한 효과가 나오는 것(꼭 사이드 이펙트가 나쁜 의미를 가지고 있는 것은 아니지만 여기서는 부정적인 의미로 쓰는 듯 하다)

 

  • 생성자 인자 순서의 중요
    • @AllArgsConstructor, @RequiredArgsConstructor를 모두 포함하기 때문에 객체를 생성할 때 인자의 순서가 매우 중요하다.
    • 순서가 변경된다면?
      • 원하는 값이 들어가지 않을 수 있음
      • 버그 발생

 

장점을 알고 올바르게 사용하자

 

그래도 괜히 만들어진 어노테이션이라기엔 장점 또한 존재한다.

  • 가독성 높은 코드를 작성할 수 있다.
  • 유지보수성을 높일 수 있다.

 

 

그럼 @Data는 어떻게 사용해야하는 걸까?

  1. Entity 에서는 사용하지 말 것
    1. DB와 가장 밀접하게 관련있기 때문에 Entity에서 사용하는 것은 위험할 수 있다.
    2. Entity에서 @Setter를 사용하는 것은 지양되기 때문에 더더욱 엔티티에서는 사용하지 말자.
  2. DTO 에서 사용하자
    1. 데이터 전송을 위한 객체인 DTO에서 사용하는 것을 지향하자.
    2. @Getter, 응답을 반환할 때 @AllArgsContructor 가 필요한 DTO의 경우에도 @Data 하나로 사용할 수 있다.
    3. 모든 DTO에서 사용 시 일관성을 유지할 수 있다.

 

@Data 적용 예제

@Data
@Builder
public class NotificationResponse {
    private List<NotificationItem> items;
    private Integer unreadCount;
}

 

알림 목록 조회 요청 시 반환하는 응답 DTO이다.

@Data를 사용하여 다른 DTO들 간의 일관성을 유지하고 @Builder 패턴을 사용하여 객체를 생성하고 있다.

@Data를 사용함으로써 가독성 또한 챙겼다.

 

 

 

감사합니다 ╰(*°▽°*)╯

'Development > Back-end' 카테고리의 다른 글

[NestJS] Pipe 사용하기  (1) 2026.02.26
[Spring Boot] 어댑터 패턴 구현하기(with. JPA, Redis)  (0) 2025.12.26
[Spring Boot] Spring Security + JWT + Redis 로그아웃 구현하기  (0) 2025.11.12
[Spring Boot] JWT 서명 알고리즘 (2) - HS256  (0) 2025.08.18
[JWT] JWT 서명 알고리즘 (1) - HMAC, RSA  (0) 2025.08.18
'Development/Back-end' 카테고리의 다른 글
  • [NestJS] Pipe 사용하기
  • [Spring Boot] 어댑터 패턴 구현하기(with. JPA, Redis)
  • [Spring Boot] Spring Security + JWT + Redis 로그아웃 구현하기
  • [Spring Boot] JWT 서명 알고리즘 (2) - HS256
knhye
knhye
  • 전체
    오늘
    어제
  • knhye
    3n1hye_
    knhye
  • 링크

    • GitHub
    • 분류 전체보기 (61)
      • Development (28)
        • Back-end (21)
        • DB (3)
        • CS (4)
      • Algorithm (6)
      • DevOps (10)
        • git (1)
        • Cloud Platform (5)
        • CICD (1)
        • Cloud Native (2)
      • Internet (2)
      • 매일메일 (6)
      • 회고 (5)
        • Capstone (2)
        • Hackathon (1)
        • 2025 (2)
      • 자격증 (1)
      • 블로그 리딩 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhye
[Spring Boot] @Data 알고 쓰기
상단으로

티스토리툴바