티스토리 뷰

JAVA

[Java] Java Record 이것의 정체

minsu20 2023. 11. 12. 21:12

Java Record의 등장

최신 프로그래밍 언어들은 간결하고 효율적인 코드 작성을 중요하게 여깁니다. 데이터를 담는 객체를 정의할 때, 이러한 현대적인 언어들이 제공하는 기능 중 하나가 바로 불변성을 가진 데이터 홀더입니다.

Kotlin의 data class 가 개발자들에게 큰 인기를 끌면서, Java도 이에 대한 답변으로 record 를 제시했습니다.  record 는 데이터를 운반하는 간단한 구조를 정의할 때 사용되며, 내부적으로 불변성을 가진 필드와 함께, 필수적인 메소드들을 자동으로 생성합니다.

 

Record와 Data Class 비교

Kotlin의 data class 와 마찬가지로, Java의 record 는 개발자가 수동으로 equlas(), hashCode(), toString() 등을 정의할 필요를 없애줍니다. 이는 코드의 양을 줄이고, 가독성을 높이며, 오류의 가능성을 줄입니다.

예를 들어, 로그인 응답 DTO를 Java에서 클래스로 한다면, 기존에는 다음과 같이 적었습니다. 

@Getter
@Builder
@AllArgsConstructor
public class SignInResponse {
    private final String accessToken;
    private final String refreshToken;
}

 

record 모든 필드에 대한 getter를 자동으로 제공하고, 모든 필드는 기본적으로 final입니다. 이는 추가적인 @Getter, @AllArgsConstructor, @NoArgsConstructor, @Builder 어노테이션이 필요하지 않음을 의미합니다. 즉, 더 이상 롬복 덕지덕지를 안 해도 된다는 뜻입니다. 

public record SignInResponse(String accessToken, String refreshToken) {}

 

Kotlin의 data class는 어떨까요? Java의 record와 상당히 유사합니다.

data class SignInResponse(val accessToken: String, val refreshToken: String)

 

두 예시 모두 필드에 대한 자동 생성된 getter와 함께, 불변성을 가진 객체를 제공합니다.

 

응답 DTO에서의 활용

API 응답을 위한 DTO에서 record 또는 data class 를 사용하면, JSON이나 XML로의 직렬화 과정에서 데이터의 일관성과 무결성을 유지할 수 있습니다. 불변 객체는 멀티스레드 환경에서 데이터의 안전성을 보장하며, 클라이언트에게 정확한 정보를 전달하는 데 중요한 역할을 합니다.


 

Java record 와 Kotlin data class 는 DTO를 정의할 때 불필요한 코드를 줄이고, 응답 객체의 안정성을 높이는 데 큰 장점을 가집니다. 불변성은 데이터의 안전한 공유를 가능하게 하고, 자동 생성된 메소드들은 개발자가 보다 중요한 비즈니스 로직에 집중할 수 있도록 합니다. Java가 record 를 도입함으로써, Kotlin의 data class 와 비슷한 수준의 편리함과 안정성을 제공하게 되었습니다. 이제 Java 개발자들도 더 깨끗하고, 더 안전하며, 더 간결한 코드를 작성할 수 있게 되었습니다.