기타/개발일기

Spring Boot Record

hu6r1s 2025. 6. 1. 17:35

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도 잘 사용하면 좋을 것 같다.