레코드(Record)
작성일
레코드
Java 14 버전부터 레코드(Record)라는 것을 사용할 수 있게 되었다. (정식 기능은 Java 16 버전)
레코드를 사용하면 불변 데이터 객체를 쉽게 생성할 수 있도록 도와주는 새로운 유형의 클래스이다.
기존의 불변 데이터 객체
public class Member {
private final String email;
private final String name;
public Member(String email, String name) {
this.email = email;
this.name = name;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
}
불변 객체를 생성하기 위해 아래와 같이 많은 코드를 작성해야 한다.
- 모든 필드에 final을 사용하여 정의
- 필드 값을 모두 포함한 생성자
- 모든 필드에 대한 Getter
- toString 재정의
- 인스턴스를 비교하기 위한 hashCode, equals 재정의
요즘은 IDE에서 자동으로 생성하는 기능이 있다. 하지만, 새 필드를 추가할 때 자동으로 업데이트하지는 못한다.
이러한 단점을 레코드를 사용해서 해결할 수 있다.
레코드를 이용한 불변 객체
public record Member(String email, String name) {}
레코드 클래스를 사용하면 훨씬 간결한 방식으로 불변 객체를 정의 할 수 있다.
생성자를 작성하지 않아도 되고 toString, equals, hashCode 메소드에 대한 구현을 자동으로 제공한다.
레코드의 제한
- 레코드는 암묵적으로 final 클래스이므로 상속이 불가
- abstract 선언 불가
- 다른 클래스를 상속(extends) 받을 수 없음, 인터페이스 구현(implements)은 가능