
Java 16에서 정식 출시된 Record에 대해 자세히 알아보겠습니다. 이 글에서는 Record의 특징, DTO와 VO 구현에서의 활용, 그리고 한계점까지 포괄적으로 다룹니다.
Record는 Java 16에서 도입된 특별한 유형의 클래스로, 불변성(Immutable)을 기본으로 합니다. 모든 필드가 final로 선언되며, 객체 생성 후에는 변경이 불가능합니다. 또한 다음과 같은 메서드들이 자동으로 생성됩니다:
equals()hashCode()toString()이러한 특성으로 인해 보일러플레이트 코드를 크게 줄일 수 있으며, 멀티스레드 환경에서도 안전한 데이터 전달이 가능합니다.
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;
}
}
public record MemberDto(String name, String email, int age) {}
두 구현을 비교해보면:
1. 코드 길이가 크게 감소
2. 동일한 기능을 더 간결하게 구현
3. 실수할 가능성 감소 (예: 오타, 누락된 메서드)
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)
);
}
}
불변성 보장
값 기반 동등성
equals()와 hashCode()의 값 기반 구현데이터 캡슐화
도메인 로직
사용 목적
상속 제한
extends를 통한 클래스 상속 불가확장성 제약
final 필드로 인한 수정 불가비즈니스 로직 제한
버전 호환성
Record는 Java에서 DTO와 VO를 구현하는 새로운 패러다임을 제시합니다. 불변성과 간결한 코드로 인해 데이터 전달 객체로 매우 적합하며, 특히 마이크로서비스 아키텍처나 REST API 구현에서 큰 장점을 발휘합니다. 다만, 복잡한 비즈니스 로직이 필요한 경우나 레거시 시스템과의 통합 시에는 한계가 있을 수 있으므로, 사용 목적에 따라 적절히 선택해야 합니다.