Backend Development

Java Record 완벽 가이드: DTO와 VO 구현의 새로운 패러다임

Kun Woo Kim 2025. 5. 29. 01:04
반응형

Java 16에서 정식 출시된 Record에 대해 자세히 알아보겠습니다. 이 글에서는 Record의 특징, DTO와 VO 구현에서의 활용, 그리고 한계점까지 포괄적으로 다룹니다.


Record란?

Record는 Java 16에서 도입된 특별한 유형의 클래스로, 불변성(Immutable)을 기본으로 합니다. 모든 필드가 final로 선언되며, 객체 생성 후에는 변경이 불가능합니다. 또한 다음과 같은 메서드들이 자동으로 생성됩니다:

  • 생성자
  • Getter 메서드
  • equals()
  • hashCode()
  • toString()

이러한 특성으로 인해 보일러플레이트 코드를 크게 줄일 수 있으며, 멀티스레드 환경에서도 안전한 데이터 전달이 가능합니다.


Record vs 전통적인 DTO

전통적인 DTO 구현

public class MemberDto {
    private final String name;
    private final String email;
    private final int age;

    public MemberDto(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public int getAge() {
        return age;
    }
}

Record를 사용한 DTO 구현

public record MemberDto(String name, String email, int age) {}

두 구현을 비교해보면:

  1. 코드 길이가 크게 감소
  2. 동일한 기능을 더 간결하게 구현
  3. 실수할 가능성 감소 (예: 오타, 누락된 메서드)

Record의 다양한 활용

1. DTO (Data Transfer Object)

  • 계층 간 데이터 전송
  • API 요청/응답 객체
  • 데이터베이스 조회 결과 매핑

2. VO (Value Object)

public record Coordinates(double x, double y) {
    public double distance(Coordinates other) {
        return Math.sqrt(
            Math.pow(this.x - other.x, 2) + 
            Math.pow(this.y - other.y, 2)
        );
    }
}

Record와 VO의 비교

공통점

  1. 불변성 보장

    • 두 타입 모두 객체 생성 후 상태 변경 불가
    • 스레드 안전성 보장
  2. 값 기반 동등성

    • 동일한 필드 값을 가지면 같은 객체로 간주
    • equals()hashCode()의 값 기반 구현
  3. 데이터 캡슐화

    • 데이터를 안전하게 보관하고 전달

차이점

  1. 도메인 로직

    • VO: 비즈니스 로직과 규칙 포함 가능
    • Record: 주로 데이터 전달에 초점
  2. 사용 목적

    • VO: 도메인 모델 내 특정 개념 표현
    • Record: 데이터 전달과 캡슐화

Record의 한계점

  1. 상속 제한

    • extends를 통한 클래스 상속 불가
    • 인터페이스 구현은 가능
  2. 확장성 제약

    • final 필드로 인한 수정 불가
    • 동적 필드 추가/제거 불가
  3. 비즈니스 로직 제한

    • 복잡한 비즈니스 로직 구현에 부적합
    • 주로 데이터 전달 목적으로 설계
  4. 버전 호환성

    • Java 14 또는 16 이전 버전에서 사용 불가
    • 레거시 시스템 통합 시 고려 필요

결론

Record는 Java에서 DTO와 VO를 구현하는 새로운 패러다임을 제시합니다. 불변성과 간결한 코드로 인해 데이터 전달 객체로 매우 적합하며, 특히 마이크로서비스 아키텍처나 REST API 구현에서 큰 장점을 발휘합니다. 다만, 복잡한 비즈니스 로직이 필요한 경우나 레거시 시스템과의 통합 시에는 한계가 있을 수 있으므로, 사용 목적에 따라 적절히 선택해야 합니다.


참고 자료

반응형