public record Person (String name, String age) { }
DTO객체의 Class 적용과 record 적용 비교
예시 코드의 설명
ArticleReposne DTO입니다.
Article객체를 매개변수(인자값)로 받는 생성자
Class 형태
@Getter
public class ArticleReposne {
private final String title;
private final String content;
public ArticleReposne(Article article) {
this.title = article.getTitle();
this.content = article.getContent();
}
}
record 형태
public record ArticleResponse(String title, String content) {
public ArticleResponse(Article article) {
this(article.getTitle(), article.getContent());
}
}
두 소스의 차이점
class형태인 경우 lombok(@Getter)을 사용하고 있으며, 변경될 일이 없을 title, content와 같은 변수를 final로 처리했습니다.
또한 파라미터를 갖는 생성자를 하나 만들었습니다.
record는 class와 다르게 lombok을 사용하지 않고 레코드의 특성상 title, content는 불변이기때문에 final을 사용하지 않습니다.
또한 생성자에서 필드 초기화를 자동으로 처리하고 있어 class보다 간결한 형태로 작성할 수 있습니다.
후기
openjdk에서도 요약 설명을 보면 불변의 데이터에 대한 전달자 역할을 한다고 합니다.
Enhance the Java programming language with records, which are classes that act as transparent carriers for immutable data. Records can be thought of as nominal tuples.
레코드는 데이터 전송을 위한 객체로 만들어졌다고 생각하는데요
lombok의 완벽한 대체로 사용하기에는 조금 무리가 있을 수도 있지만
단순한 데이터 전달 클래스로 사용하기에는 더 없이 뛰어나다고 생각하는 바입니다.
아래는 우연히 유튜브 알고리즘에서 본 record 소개를 해주신 개발자분이 계신데요 한번 보시면 상당히 도움되는 영상이라 링크해봤습니다!