Spring Boot에서 데이터를 전달하기 위한 DTO를 만들다 보면 비슷한 코드가 반복되는 경우가 많다.
특히 필드의 값을 변경하지 않고 데이터를 전달하기 위한 용도라면 Java의 record를 활용할 수 있다.
1. Record란?
record는 데이터를 간단하게 표현하기 위한 클래스이다.
일반적인 DTO는 다음과 같이 작성할 수 있다.
@AllArgsConstructor
@Getter
public class CommentModifyForm {
@NotBlank(message = "댓글 내용을 입력해주세요.")
@Size(min = 2, max = 100, message = "댓글 내용은 2글자 이상 100글자 이하로 입력해주세요.")
private String content;
}
이를 record로 작성하면 훨씬 간결해진다.
public record CommentModifyForm(
@NotBlank(message = "댓글 내용을 입력해주세요.")
@Size(min = 2, max = 100, message = "댓글 내용은 2글자 이상 100글자 이하로 입력해주세요.")
String content
) {}
record를 사용하면 생성자와 접근 메서드 등을 직접 작성하지 않아도 된다.
2. 값을 가져오는 방식
일반적인 클래스에서는 getter를 사용한다.
form.getContent();
하지만 record에서는 필드명과 동일한 메서드를 사용한다.
form.content();
따라서 컨트롤러에서도 다음과 같이 사용할 수 있다.
@PostMapping("/comments")
public String write(CommentModifyForm form) {
String content = form.content();
// ...
}
3. Record는 왜 사용하는가?
record는 데이터를 담아서 전달하는 객체를 간결하게 표현하기 좋다.
특히 다음과 같은 경우에 활용하기 좋다.
- 요청 데이터를 전달하는 DTO
- 응답 데이터를 전달하는 DTO
- 변경할 필요가 없는 데이터
- 단순한 데이터 전달 객체
반대로 데이터를 계속 변경해야 하거나 복잡한 비즈니스 로직이 필요한 객체라면 일반 클래스를 사용하는 것이 더 적합할 수 있다.
4. Record의 특징
record는 기본적으로 불변 데이터를 표현하기 위한 목적으로 설계되었다.
public record CommentModifyForm(String content) {
}
생성 후에는 content 값을 직접 변경하는 setter를 제공하지 않는다.
따라서 다음과 같은 코드도 사용할 수 없다.
form.setContent("수정된 댓글");
필요한 값을 생성할 때 전달한다.
CommentModifyForm form = new CommentModifyForm("댓글 내용");
'BackEnd > Spring' 카테고리의 다른 글
| [Spring] REST API 버저닝과 @RequestMapping (0) | 2026.08.12 |
|---|---|
| [Spring] REST API 순환참조 해결하기 - DTO와 Record 활용 (0) | 2026.08.12 |
| [Spring] orphanRemoval (0) | 2026.08.11 |
| [Spring] REST API란? SSR과 CSR 차이부터 JSON 응답까지 (0) | 2026.08.11 |
| [Spring] Validation 오류 처리하기 - BindingResult 활용 (0) | 2026.08.11 |
댓글