레코드란?
- 불변 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스
- 레코드는 암묵적으로 상속할 수 없는 final 클래스다.
- abstract 키워드를 사용할 수 없다.
- 다른 클래스를 상속 받을 수는 없지만, 인터페이스 구현은 가능하다.
- Java 16부터 제공
기존의 불변 데이터 객체 작성 방법
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;
}
}
레코드 작성 방법
public record Person(String name, String address) {}
기존 불변 클래스와 레코드의 작성법 차이
- 불변 클래스
- 모든 필드에 final을 사용하여 명시적으로 정의
- 필드 값을 모두 포함한 생성자
- 모든 필드에 대한 접근자 메서드
- 상속을 방지하기 위해 클래스 자체를 final로 선언
- 로깅 출력을 제공하기 위한 toString 재정의
- 두 개의 인스턴스를 비교하기 위한 hashCode, equals 재정의
- 레코드
- 컴파일러는 헤더를 통해 내부 필드를 추론
- 생성자를 작성하지 않아도 되고 toString, equals, hashCode 메소드를 자동으로 구현
레코드 사용 예시
//레코드 작성 예시
public record Person(String name, String address) {}
//레코드 사용 예시
String name = "HongGilDong";
String address = "JoSeon";
Person person = new Person(name, address);
//getter는 변수명()처럼 사용한다.
System.out.println("이름 : " + person.name());
System.out.println("주소 : " + person.address());