빙응의 공부 블로그

[JAVA] Record와 DTO 본문

JAVA

[JAVA] Record와 DTO

빙응이 2024. 10. 2. 16:31

 

JAVA의 Record에 대해 알아보자!!

📝Record란 무엇일까요?


레코드(Record)는 Java 14에서 미리 보기 기능으로 도입되었고, JAVA 16에서 정식으로 도입된 새로운 데이터 클래스입니다. 레코드는 간결하고 불변한 데이터 구조를 정의하는 데 사용되며, 주로 데이터 전송 객체(DTO)나 간단한 데이터 모델 정의에 유용합니다.

 

기본 주요 개념
  • 불변성 : 레코드의 필드는 기본적으로 final이며, 한 번 생성된 레코드는 변경할 수 없습니다.
  • 자동 생성 : 레코드를 정의하면 여러 메서드가 자동 생성됩니다.
    • equals(), hashCode(), toString(), Getter
레코드 정의 

레코드는 record 키워드를 사용하여 정의됩니다.

public record Person(String name, int age) {}

 

📌 그렇다면 장점은?

  • 간결함 : 레코드를 사용하면 코드를 줄일 수 있습니다. 클래스 정의, 생성자, Getter, toString(), equals(), hashCode() 메서드를 수동으로 구현할 필요가 없습니다. 추가로 Lombok 관련 어노테이션도 줄일 수 있습니다.
  • 명확성: 레코드는 주로 데이터 캡슐화에 집중되므로, 코드의 가독성을 높이고 의도를 명확하게 전달할 수 있습니다.
  • 불변성: 레코드는 불변 객체를 기본으로 하여 데이터 안전성을 제공합니다. 레코드를 생성한 후에는 상태가 변하지 않으므로 스레드 안전성이 보장됩니다

 

📝DTO와의 연관성

Record와 DTO는 서로 연관성이 깊습니다. DTO는 데이터를 전송하기 위한 객체이며,
레코드는 이러한 DTO를 정의하기 위해 만들어졌습니다.

그렇기에 레코드는 DTO를 정의하는 데 매우 적합합니다.

 

 

📌 예제 

@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CourseDto {
    @NotEmpty(message = "주소를 작성해야합니다.")
    private String address;
    @NotEmpty(message = "타이틀을 작성해야합니다.")
    private String title;
}

해당처럼 평범한 DTO가 있다고 생각해봅시다. 해당 DTO는 불변성을 위해 @Getter만 정의했습니다.

 

여기서 Record를 사용하면 아주 간단하게 표현할 수 있습니다.

@Builder
public record CourseDto(
    @NotEmpty(message = "주소를 작성해야합니다.") String address,
    @NotEmpty(message = "타이틀을 작성해야합니다.") String title) {
}