[Spring] DTO class를 record로 사용하는 이유

2025. 8. 29. 19:59·Spring


DTO (Data Transfer Object) 

스프링 프로젝트를 진행하다보면, DTO에 대해서 많이 들어봤을 것이다. DTO는 계층 간에 데이터를 전달해주기 위해 사용하는 클래스이다. 그렇기에 데이터가 쉽게 변하면 안된다는 특징을 가지고 있다. 그래서 보통 DTO 클래스의 필드에는 final 속성을 갖거나 Setter를 선언하지 않는다. 

@Getter
public class NameRequest{
	private final String name;
}

Record 

JDK 14버전에 추가된 기능으로 record는 class 처럼 사용할 수 있지만, class와는 달리 몇 가지 특징을 가지고 있으며 가장 주된 특징은 불변성이다.

public record NameRequest(String name) {}

 

특징

1) 모든 필드가 `final` 

record의 필드는 자동으로 `private final` 이라 생성 이후 값 변경이 불가하고, Setter도 없다. 

 

2) 기본 getter 제공

기본적으로 `getter` 를 제공하며, `getX()` 처럼 주어지는 것이 아니라 `x()` 형식으로 제공된다. 

public record NameRequest(String name) {}

public class Main {
    public static void main(String[] args) {
        NameRequest req = new NameRequest("Alice");

        System.out.println(req.name());   // "Alice"
        // System.out.println(req.getName()); // 컴파일 에러: 메서드 없음
    }
}

 

3) 필드 값이 같으면 `equals` 는 true에 해당한다. 

`equals` , `hashCode` 가 필드 값 기준으로 자동 생성된다. 즉, 두 레코드의 필드 값이 모두 같다면 동등하다고 판단한다. 

public record NameRequest(String name) {}

public class Main {
    public static void main(String[] args) {
        NameRequest a = new NameRequest("Alice");
        NameRequest b = new NameRequest("Alice");

        System.out.println(a == b);                      // false
        System.out.println(a.equals(b));                 // true  (
        System.out.println(a.hashCode() == b.hashCode()); // true
    }
}

 

언제 사용하면 좋을까 ?

API 요청과 응답 DTO 에서 사용하는 것이 좋다. 즉, '값을 담아서 전달만' 할 때가 가장 적합하다. 가변 로직이 필요 없는 '데이터 운반용' 이면 record가 가장 안전하다. 

'Spring' 카테고리의 다른 글

[Spring] Spring Events 사용해 이벤트 발행하기  (0) 2025.09.07
[Spring] Setter 사용을 지양해야하는 이유  (0) 2025.08.29
[Spring] 연관관계  (0) 2025.08.29
[Spring] PSA (Portable Service Abstraction)  (0) 2025.08.27
[Spring] @Transactional 개념과 사용  (0) 2025.08.19
'Spring' 카테고리의 다른 글
  • [Spring] Spring Events 사용해 이벤트 발행하기
  • [Spring] Setter 사용을 지양해야하는 이유
  • [Spring] 연관관계
  • [Spring] PSA (Portable Service Abstraction)
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    STT
    docker
    레디스
    coderabbit
    몽고디비
    네트워크
    스프링부트
    CoolSMS
    코드레빗
    java
    스프링
    지라
    자바
    Spring
    TDD
    파인튜닝
    jira
    springboot
    redis
    git
    Network
    AI
    도커
    깃
    MongoDB
    OS
    github
    운영체제
    promtail
    깃허브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Spring] DTO class를 record로 사용하는 이유

티스토리툴바