Java Record
Record는 Java 16에서 정식으로 도입된 새로운 클래스 유형입니다. 주요 특징은 다음과 같습니다:
Java 14 1차 Preview, Java 15 2차 Preview
Record의 기본 특징
- 불변(immutable) 데이터 객체를 생성하기 위한 간단한 방법을 제공
- 데이터를 보관하고 전달하는 것이 주 목적
- 모든 필드가
private final로 선언됨
자동 생성되는 요소들
Record를 선언하면 다음 요소들이 자동으로 생성됩니다:
- 생성자 (canonical constructor)
- getter 메서드
equals()메서드hashCode()메서드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의 주요 제한사항
- Record는 다른 클래스를 상속할 수 없습니다
- Record는 항상 final 클래스입니다
- Record의 필드는 모두 final입니다
- Record 내에 추가 인스턴스 필드를 선언할 수 없습니다
Record의 장점
- 보일러플레이트 코드 감소
- 불변 객체 생성 용이
- 데이터 전달 객체(DTO) 작성 간소화
- 명확한 의도 전달
주요 사용 사례
- DTO (Data Transfer Objects)
- API 응답 모델
- 복합 키(Composite keys)
- 불변 데이터 그룹화 특히 빌더 패턴이나 많은 getter/setter가 필요한 데이터 클래스를 작성할 때 Record를 사용하면 코드가 매우 간단해집니다.