Record 클래스는 JDK 14부터 나온 필드의 타입과 이름만 필요한 불변 데이터 클래스이다.
아래 코드를 살펴보자.
public class Person {
private final String name;
private final String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
@Override
public int hashCode() {
return Objects.hash(name, address);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (!(obj instanceof Person)) {
return false;
} else {
Person other = (Person) obj;
return Objects.equals(name, other.name)
&& Objects.equals(address, other.address);
}
}
@Override
public String toString() {
return "Person [name=" + name + ", address=" + address + "]";
}
}
위 Person 클래스는 한번 생성이 되면 변경할 수 없는 불변 클래스이다. Person 클래스를 불변 클래스 로 사용하기 위해 작성한 코드들은 다음과 같다.
priavate, final 키워드getter 메서드public 생성자true를 반환하는 equals메서드hashCode메서드toString *메소드*이러한 불변 클래스를 매번 생성하는데 생기는 두 가지 문제점이 있다.
Person 클래스를 만드는데 필요한 위 6가지 코드가 Person과 같은 단순 불변 데이터 클래스를 만들 때 계속해서 반복된다. 또한, 필드가 추가될 때마다 이에 맞게 매번 새로운 코드들을 추가해줘야 한다.
이러한 문제점들을 해결하기 위해 우리는 Record 클래스를 다음과 같이 사용할 수 있다.
public record Person (String name, String address) {}
위 코드처럼 레코드 클래스는 필드의 타입과 이름만 적으면 private, final 필드 적용, Equals, hashCode, toString 메서드와 모든 인수가 담긴 public 생성자를 Java 컴파일러에 의해 생성하게해준다.