[Spring] Class와 Record의 비교

최서영·2024년 10월 25일

1. Class를 기반으로 한 DTO (Data Transfer Object)

  • DTO는 계층 간 데이터 전달을 위한 객체로, controller-service-repository 간에 데이터를 전송할 때 사용한다.
  • DTO는 데이터를 캡슐화하고, entity를 직접 노출하지 않기 위한 방법이다. DTO를 사용함으로써 계층 간 데이터를 전달할 때 불필요한 데이터 노출을 막고, 필요한 데이터만을 선택적으로 전송할 수 있다.
  • <DTO의 특징>
    • Getter/Setter: 각 필드에 대한 Getter와 Setter 메서드를 제공.
    • 생성자 및 빌더 패턴: 객체를 생성할 때 보통 생성자나 빌더 패턴을 사용.
  • <DTO 사용의 장점>
    • 데이터 캡슐화: 엔티티의 데이터를 노출하지 않고 필요한 부분만 전달 가능.
    • 유연성: DTO에 필요한 필드만 선택적으로 추가 가능.
  • <Class를 기반으로 한 DTO 예시>
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
    private String name;
    private String email;
}
  • @Getter와 @Setter: 각 필드에 대해 자동으로 Getter와 Setter를 생성.
  • @NoArgsConstructor: 기본 생성자를 자동으로 생성.
  • @AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자를 자동으로 생성.

2. Record를 기반으로 한 DTO

  • Record는 DTO와 비슷하게 데이터를 전달하기 위한 객체로 사용할 수 있지만, DTO보다 더 간결한 문법을 제공한다.
  • 자동으로 생성되는 Getter, equals(), hashCode(), toString() 등을 제공한다.
  • Record는 불변 객체이기 때문에 생성 후 필드를 수정할 수 없다.
  • <Record의 특징>
    • Immutable: 한 번 생성된 이후 상태가 변경되지 않는다.
    • 간결한 선언: 불필요한 코드(생성자, Getter 등)를 자동으로 생성해 줌.
    • Setter 없음: 값이 한 번 설정되면 변경할 수 없습니다.
  • <Record의 장점>
    • 코드 간소화: 데이터 전달을 위한 객체를 더 간단하게 정의 가능.
    • 불변성: 데이터 변경을 막아 안전하게 다룰 수 있음.
  • <Record 예시>
public record UserDto(String name, String email) {
}

Record를 선언하면, 자동으로 다음과 같은 메서드가 제공된다.

  • 생성자: public UserDto(String name, String email)
  • Getter: name() 및 email()
  • toString(): UserDto[name=..., email=...]
  • hashCode(), equals()

3. Class의 DTO vs Record의 DTO

특징ClassRecord
불변성Mutable (기본적으로 변경 가능)Immutable (변경 불가능)
코드 작성량생성자, Getter, Setter 필요자동으로 생성됨
Java 버전Java 버전에 무관Java 14 이상
상속다른 클래스를 상속하거나 상속받을 수 있음상속 불가능
Setter 제공필드 값을 수정할 수 있는 Setter 제공Setter 없음 (불변 객체)

1개의 댓글

comment-user-thumbnail
2024년 10월 25일

우앙 떠영님 TIL이당!!!

답글 달기