참고자료
https://www.baeldung.com/java-record-keyword
https://colevelup.tistory.com/28
https://velog.io/@pp8817/record
public record QuestionResponseDto (
Long id,
String title,
String content,
LocalDateTime createdAt,
int view,
List<Answer> answerList,
Member member,
int likeCount
) {
}
소스코드를 보다보면 위와 같은 record(?)라는 것을 볼 수 있다..
record는 코드를 간결하게 만들기 위해 도입되었고, Java 14버전에서 추가된 새로운 클래스 타입으로 변경 불가(immutable) 데이터 객체를 쉽게 만들 수 있다. 불변성(Immutability)의 특징으로 record 필드는 한 번 설정되면 값을 변경할 수 없다. 대신 데이터를 한 번 설정하면 값을 변경할 수 없어 데이터 안정성이 보장된다. ⭐ 따라서 DTO는 데이터 전달자의 역할만을 하기 때문에 DTO 자체에서 값을 변경하거나 수정할 수 있는 경우 의도치 않게 생성자, setter를 이용해 값이 변경될 수 있다.
특징은
1. record 내 각 멤버변수는 private final로 선언된다.
2. 필드별 getter가 자동으로 생성된다.
-> (주의) String id 변수가 있을 때, getter는 getId()가 아니라 id()가 된다.
3. 모든 멤버변수를 인자로 하는 public 생성자를 자동으로 생성한다.
4. equals(), hashCode(), toString()이 생성된다.
5. 기본생성자는 제공하지 않으므로 필요한 경우 직접 생성해야 한다.
public record QuestionResponseDto (
Long id,
String title,
String content,
LocalDateTime createdAt,
int view,
List<Answer> answerList,
Member member,
int likeCount
) {
public QuestionResponseDto(Question entity){
this(entity.getId(), entity.getTitle(), entity.getContent(),
entity.getCreatedAt(), entity.getView(),
entity.getAnswerList(), entity.getMember(), entity.getLikeCount());
}
}
레코드의 기본 생성자를 호출해서 사용하고 싶은 생성자를 직접 만들 수는 있다.
+ 글 쓰다 말았는데, 졸다가,,, record는 entity에 사용하지 말라는데 나중에 알아보장,,,
'자바' 카테고리의 다른 글
| [Java] <? super K> 제네릭 하한 경계 와일드 카드 (0) | 2026.01.09 |
|---|---|
| [Java] 제네릭 메서드와 정적 메서드: 왜 ResponseDTO.<T>builder()는 되고 ResponseDTO<T>.builder()는 안 될까? (0) | 2025.01.28 |