사이드 프로젝트 진행 중 PM분께서 기존에 not null로 받던 문자열 List 데이터를 nullable 하게 받을 수 있도록 수정해달라는 요청이 왔다. 이를 수정하려고 보니, 요청 DTO는 기존에 코드 컨벤션에 의거하여 Record를 사용하고 있었다.
자바 Record는 보일러플레이트 코드를 줄이는 것을 목표로 하는 특이한 형태의 클래스 선언 방법이다. Java 16부터 정식적으로 사용이된 기술이다.
일반적으로 사용하는 클래스와 다르게 생성자 형태를 띠우며, record 예약어를 통해 레코드를 선언할 수 있다.
public record RequestDto(
String name,
String gender
){
}
위처럼 소괄호 안에 클라이언트로 부터 받아올 데이터를 매핑하여 사용한다. 내부적으로 Getter를 구현해주면, 필드를 자동 private final 처리 Setter를 사용하지 못하도록막아주어 캡슐화 및 보일러플레이트 코드 간소화라는 장점이 있다.
일반적으로 클래스의 인스턴스 생성 시 필드를 초기화 해주기 위해서는 생성자를 활용하는 것이 일반적이다. 따라서, record 클래스의 생성자를 통해서 List 객체를 초기화 해주도록 하겠다.
정확히 확인하기 위해서 공식문서에 명시된 Canonial Constructor에 대해서 확인해 봤다.
이름은 Canonial Constructor라고 하지만, 컴팩트한 형태의 생성자라고 생각하면 이해하기 쉬울 것 같다. 이를 적용해 본 결과, 콘솔 로그에 다음과 같이 List가 초기화 되는 것을 확인할 수 있다.
정상적으로 빈 리스트 객체로 초기화 된 것을 확인할 수 있다.