12월 5일 -레코드 클래스

Yullgiii·2023년 12월 5일
0
post-thumbnail

레코드 클래스란?

레코드 클래스는 자바 14부터 도입된 새로운 종류의 클래스로, 데이터 전송 객체(Data Transfer Object, DTO)나 값 객체(Value Object)를 표현하는 데 유용하다. 레코드 클래스는 final 키워드가 붙은 필드와 이 필드들을 초기화하는 생성자를 자동으로 제공한다. 또한, getter 메소드, equals(), hashCode(), toString() 메소드도 자동으로 생성된다.

레코드 클래스의 장점

레코드 클래스는 간결한 구문으로 데이터만을 보유하는 객체를 표현할 수 있다는 장점이 있다. 따라서, 반복적인 코드 작성을 줄이고 코드의 가독성을 향상시킬 수 있다. 또한, 레코드 클래스의 모든 필드는 자동으로 private final로 선언되므로 불변성을 보장한다.

레코드 클래스의 단점 🚀

레코드 클래스의 필드는 모두 final로 선언되므로, 한 번 생성된 객체의 상태를 변경할 수 없다. 따라서, 상태 변경이 필요한 경우에는 레코드 클래스 대신 일반 클래스를 사용해야 한다.

레코드 클래스 사용하기 적절한 환경

레코드 클래스는 데이터 전송 객체(DTO)나 값 객체(Value Object)를 표현하는 데 적합하다. 이들 객체는 상태 변경이 필요 없으며, 데이터를 저장하고 전달하는 역할만 수행하므로 레코드 클래스의 특징을 잘 활용할 수 있다.

예제 코드

예전 과제에서 썼던걸 스윽 들고와서 써보도록하자

원래코드

import lombok.Getter;
import lombok.NoArgsConstructor;
import yull.todoblog.domain.Article;
import java.time.LocalDateTime;

@NoArgsConstructor
@Getter
// ArticleViewResponse: 게시글 상세 조회 응답을 위한 DTO
public class ArticleViewResponse {

    private Long id; // 게시글 ID
    private String title; // 게시글 제목
    private String content; // 게시글 내용
    private LocalDateTime createdAt; // 생성 시간
    private String author;
    // 생성자: Article 엔티티를 DTO로 변환
    public ArticleViewResponse(Article article) {
        this.id = article.getId();
        this.title = article.getTitle();
        this.content = article.getContent();
        this.createdAt = article.getCreatedAt();
        this.author = article.getAuthor();
    }
}

ArticleViewResponse DTO 클래스를 레코드 클래스로 변경하면 다음과 같다.

package yull.todoblog.dto;

import java.time.LocalDateTime;

// ArticleViewResponse: 게시글 상세 조회 응답을 위한 레코드 클래스
public record ArticleViewResponse(
    Long id,            // 게시글 ID
    String title,       // 게시글 제목
    String content,     // 게시글 내용
    LocalDateTime createdAt, // 생성 시간
    String author       // 작성자
) {
    // 추가적인 메서드나 로직이 필요한 경우 여기에 작성할 수 있습니다.

    // 레코드 클래스의 생성자
    public ArticleViewResponse(Article article) {
        this(
            article.getId(),
            article.getTitle(),
            article.getContent(),
            article.getCreatedAt(),
            article.getAuthor()
        );
    }
}

이렇게 레코드 클래스를 활용하면, 데이터 전송 객체(DTO)를 보다 간결하고 안전하게 표현할 수 있다.
그리고 보기에 심히 좋았더라 같은 느낌이지 않는가!

어,.....근데 문제가 있다...
뭐야 레코드 클래스를 쓰면....상속이 안되는거야?
Global을 만들어서 상속을 사용해보려했는데 안되네...?그건 내일 보도록하자...

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글