DTO와 Record 비교

sue·2024년 12월 18일

JAVA

목록 보기
6/6

Java 개발에서 데이터를 전달하기 위해 DTO (Data Transfer Object)Record를 사용할 수 있습니다. 두 개념은 비슷해 보이지만, 목적, 작성 방법, 불변성, 코드 간결성 등 여러 측면에서 차이가 있습니다.


1. DTO (Data Transfer Object)

DTO는 계층 간 데이터를 전달하는 객체입니다.

특징

  • 클래스 기반으로 작성되며 getter, setter, toString, equals 등을 명시적으로 정의해야 합니다.
  • 불변성을 보장하기 어렵다: Setter를 제공하면 객체 상태가 변경될 수 있습니다.
  • 일반적으로 Lombok과 함께 사용하여 보일러플레이트 코드를 줄일 수 있습니다.

예제

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
    private Long id;
    private String username;
    private String email;
}

2. Record

Java 16부터 도입된 Record는 데이터를 간결하게 표현하는 불변 객체입니다.

특징

  • 불변성: 필드가 final로 선언되며, 값 변경이 불가능합니다.
  • 자동 생성: getter, toString, equals, hashCode 메서드가 자동으로 생성됩니다.
  • 작성 방식이 매우 간결하며 보일러플레이트 코드가 없습니다.
  • Java 16 이상에서만 사용 가능합니다.

예제


public record UserDto(Long id, String username, String email) {}

3. 비교

비교 항목DTO (클래스)Record
불변성Setter 제공 시 불변성 보장 어려움필드가 final이므로 불변성 보장
보일러플레이트getter, setter, toString 필요자동으로 생성되므로 코드가 간결함
사용 가능 버전Java 버전 제한 없음Java 16 이상
유연성추가 메서드나 로직을 자유롭게 추가 가능제한적, 필드와 생성자만 간결히 표현
호환성기존 라이브러리나 프레임워크와 호환일부 프레임워크나 라이브러리에서 제한적
가독성코드 길어질 수 있음매우 간결하고 명확

4. 장단점

DTO (클래스)의 장단점

  • 장점:
    • 유연하게 커스텀 메서드나 로직을 추가할 수 있습니다.
    • 모든 Java 버전에서 사용 가능합니다.
  • 단점:
    • 불변성을 유지하려면 수동으로 final 필드와 생성자를 사용해야 합니다.
    • 코드가 길고 보일러플레이트가 많아질 수 있습니다.

Record의 장단점

  • 장점:
    • 코드가 매우 간결하며 불변성을 자동으로 보장합니다.
    • getter, equals, hashCode 등이 자동 생성됩니다.
  • 단점:
    • Java 16 이상에서만 사용할 수 있습니다.
    • 비즈니스 로직 추가가 제한적입니다.

5. 사용 사례

DTO (클래스) 사용

  1. 복잡한 비즈니스 로직이 필요한 경우.
  2. 추가 필드나 메서드를 통해 상태를 변경하거나 계산이 필요할 때.
  3. Java 8~11 등에서 사용해야 할 경우.

Record 사용

  1. 데이터 전달만 목적이며 불변성이 중요한 경우.
  2. 단순한 객체로 값만 전달하면 충분한 경우.
  3. Java 16 이상에서 가독성과 코드의 간결함을 중시할 때.

6. 결론

  • DTO는 기존 Java 프로젝트에서 널리 사용되며, 유연하게 커스텀 로직을 추가할 수 있습니다.
  • Record는 최신 Java 버전에서 불변 객체를 간결하게 작성할 수 있는 기능입니다.
profile
All is well ! 🔥

0개의 댓글