Dev./Spring

[Spring] record DTO 클래스

limitation01 2025. 11. 17. 09:14

응답 DTO 클래스를 만들다보면 인텔리제이에서 Convert to record 표시가 뜬다. 단순히 코드 추천인 줄 알고 넘어갔는데

왜 응답 DTO에 추천이 뜰까 생각하며 record 클래스를 알아보게 되었다.

record 클래스

자바 14부터 도입된 불변 객체를 간편하게 생설할 수 있는 새로운 타입. record는 주로 데이터를 보관하는 객체로 사용되며, 기본적인 작업들을 자동으로 처리해주기 때문에 간결하고 효율적이다.

특징

1. 불변 객체

  • 객체가 생성된 후, 필드를 변경할 수 없다.
  • final로 처리된 필드만 사용하기 때문에 불변성 보장

2. 자동 생성 메소드

  • getter, toString(),equals(),hashCode() 메소드가 자동으로 생성
  • 필드를 기반으로 계산되므로, 객체의 값을 비교하거나 문자열로 출력할 때 유용
  • 수동으로 작성할 필요가 없어 코드가 간결
public record RecordEx(String s1, String s2) {}

RecordEx r1 = new RecordEx("Hello", "World");
RecordEx r2 = new RecordEx("Hello", "World");
System.out.println(r1.equals(r2)); // true
  • 객체의 필드값에 대해 equals() 자동 구현하기 때문에 r1.s1 == r2.s1 && r1.s2 == r2.s2 모두 true일때 true 반환

3. 상속 불가

  • 값 객체로 설계 되어 상속을 지원하지 않으며 다형성 확장 불가능
public record RecordEx(String s1, String s2) {}
// 컴파일 에러
public class Example extends RecordEx{}

왜 응답 DTO에 record 클래스가 유용할까?

1. 불변성

  • DTO는 주로 데이터를 전달하는 역할을 하며 비즈니스 로직을 포함하지 않아 불변성을 유지하는 것이 안전
  • DTO가 불변이면 데이터가 의도치않게 변경되는 문제를 방지
  • 데이터 무결성 보장

2. 간결한 코드

  • 불필요한 setter나 다른 비즈니스 로직을 포함하지 않음
  • 기존 DTO는 getter, setter, 생성자를 수동으로 작성해야하는데 getter와 생성자가 자동으로 생성되므로 유지보수 용이

 

 

'Dev. > Spring' 카테고리의 다른 글

[Spring] DELETE 메소드에 RequestBody를 지양해야 하는 이유  (0) 2025.11.13
[Spring] Filter  (0) 2025.11.13
[Spring] JPA 영속성 컨텍스트  (0) 2025.11.10
[Spring] JPA N+1 문제  (0) 2025.11.07
[Spring] JPA 관계 설정(1:N/N:1)  (0) 2025.11.05