Record는 Java 16에서 정식으로 출시된 클래스 유형으로, 주로 불변 객체를 생성할 때 사용한다.
장점 : 간결한 코드, 불변성, 직관적인 데이터 표현, 메모리 효율성.
단점 : 불변성으로 인한 데이터 수정의 어려움, 상속 불가, 복잡한 로직 처리의 제한, 오래된 Java 버전과의 호환성 문제.
나도 기존에는 Class형태로 사용했었지만 불변성 등 여러가지에 대해 배우다보니 이번에는 Dto를 Record로 만들어보기로했다.
package com.forj.auth.application.dto.request;
import com.forj.auth.domain.model.UserRole;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
public record UserSignupRequestDto(
@Size(min = 4, max = 10)
@Pattern(regexp = "^[a-z0-9]+$")
String username,
@Size(min = 8, max = 15)
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*?_]).+$")
String password,
UserRole role
) {
}
간단하게 필드에 대한 정보만 입력하면 손쉽게 구현이 가능하다.
하지만 위에 언급한대로 불변객체를 다루는데에 유용하므로 데이터에 변경이 필요한 경우 추가적인 설정을 해주거나 그냥 Class를 사용하는 것이 이로울거같다.