Java Record

Record는 Java 16에서 정식으로 도입된 새로운 클래스 유형입니다. 주요 특징은 다음과 같습니다:

Java 14 1차 Preview, Java 15 2차 Preview

Record의 기본 특징

  • 불변(immutable) 데이터 객체를 생성하기 위한 간단한 방법을 제공
  • 데이터를 보관하고 전달하는 것이 주 목적
  • 모든 필드가 private final로 선언됨

자동 생성되는 요소들

Record를 선언하면 다음 요소들이 자동으로 생성됩니다:

  1. 생성자 (canonical constructor)
  2. getter 메서드
  3. equals() 메서드
  4. hashCode() 메서드
  5. toString() 메서드

사용 예시

// 기본적인 Record 선언
public record Person(String name, int age) { }

// 사용 방법
Person person = new Person("김철수", 25);
System.out.println(person.name());     // getter 사용
System.out.println(person.age());      // getter 사용
System.out.println(person.toString()); // toString() 자동 구현

Record의 특별한 기능

// 생성자 유효성 검사 추가
public record Person(String name, int age) {
    // compact 생성자
    public Person {
        if (age < 0) {
            throw new IllegalArgumentException("나이는 음수일 수 없습니다");
        }
        if (name == null) {
            throw new NullPointerException("이름은 null일 수 없습니다");
        }
    }
}

Record의 주요 제한사항

  1. Record는 다른 클래스를 상속할 수 없습니다
  2. Record는 항상 final 클래스입니다
  3. Record의 필드는 모두 final입니다
  4. Record 내에 추가 인스턴스 필드를 선언할 수 없습니다

Record의 장점

  1. 보일러플레이트 코드 감소
  2. 불변 객체 생성 용이
  3. 데이터 전달 객체(DTO) 작성 간소화
  4. 명확한 의도 전달

주요 사용 사례

  • DTO (Data Transfer Objects)
  • API 응답 모델
  • 복합 키(Composite keys)
  • 불변 데이터 그룹화 특히 빌더 패턴이나 많은 getter/setter가 필요한 데이터 클래스를 작성할 때 Record를 사용하면 코드가 매우 간단해집니다.