응답 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 |