Record
Java의 `record`는 불변 객체를 간결하게 표현할 수 있는 문법이다.
복잡한 `getter`, `equals`, `hashCode`, `toString`와 같은 보일러플레이트 코드를 자동으로 생성해준다.
public record CustomerRequest(
String id,
@NotNull(message = "Customer name is required")
String name,
@NotNull(message = "Customer name is required")
@Email(message = "Customer email is not a valid email address")
String email,
Address address
) { }
위 코드를 사용함으로 각 필드의 getter 등을 생성하게 된다. 또한 값은 불변으로 한 번 생성 후 변경되지 않는다.
Spring Boot에서 record를 사용하는 이유
Spring Boot에서는 DTO나 응답 모델, 설정 객체 등 순수한 데이터 전달용 클래스를 많이 사용한다. 이 때 record를 사용하면 다음과 같은 이점이 있다.
| 기존 클래스 방식 | record 사용 |
| 코드가 길다 | 코드가 짧고 명확하다 |
| 값 변경 위험 존재 | 불변으로 안전하다 |
| 생성자/Getter/ToString 등 수동 작성 | 자동 생성 |
물론 Lombok을 사용하면 긴 코드와 수동 작성에 대한 문제가 없어지기는 한다.
| 항목 | Lombok | Record |
| Java 버전 | Java 8 이상 | Java 16 이상 (정식) |
| 가변성(Mutability) | 가변 가능 (필요 시 불변도 가능) | 완전 불변 (모든 필드는 final) |
| 상속 | 가능 (다른 클래스 상속 가능) | 불가능 (record는 final) |
| 인터페이스 구현 | 가능 | 가능 |
| 보일러플레이트 제거 | @Getter, @Setter, @ToString 등으로 제거 | 생성자, getter, toString, equals, hashCode 자동 생성 |
| 의존성 | lombok 라이브러리 필요 | 순수 Java (의존성 없음) |
| 직렬화 | 커스터마이징 쉬움 | 제한적 (모든 필드가 생성자 파라미터로 있어야 함) |
| JPA Entity | O | ❌ 비추천 (불변성, 기본 생성자 없음 등 때문) |
Record는 자바에서 정식으로 사용된 키워드이며, 불변하기 때문에 Record도 잘 사용하면 좋을 것 같다.
'기타 > 개발일기' 카테고리의 다른 글
| [디자인 패턴] Spring Boot로 싱글톤 패턴 알아보기 (0) | 2024.12.29 |
|---|---|
| Spring Boot 3.x.x Swagger API 명세서 (0) | 2024.09.18 |
| 좋은 코드란 무엇일까? (0) | 2024.08.31 |
| 대용량 트래픽을 처리하는 방법 (1) | 2024.06.09 |
| [Redis 캐싱 처리] Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default (0) | 2024.03.24 |