- 불변 객체(immutable)를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스
- JDK 16에서 정식 스펙으로 포함됨
사용 예시
- 레코드 클래스를 사용하면 불변 객체를 쉽게 생성할 수 있음
- 모든 필드에 final 이 적용 되는 것
- 생성자 작성하지 않아도 되고 toString, equals, hashCode 메소드에 대한 구현을 자동으로 제공함
- 기본적인 동작은 재정의할 수 있음
- 레코드는 암묵적으로 final 클래스임. abstract 선언 불가
- 다른 클래스 상속 받을 수 없고 인터페이스 구현은 가능함
생성자 Customization
- validation을 위해 사용함
Record에 필요한 파라미터 그대로 받는 생성자
다른 파라미터를 받는 생성자
컴파일 에러
- 위의 2개 생성자는 메서드 시그니쳐가 겹치게 되므로 컴파일 에러가 발생함
Serialize 에러
- Jackson이 object를 serialize할 때, getter가 필요한데, record로 선언할 시 getter가 없음. 따로 명시해주어야 하는데, 이럴거면 그냥 class로 선언하고 @Getter 붙여주는 편이 훨씬 편할듯함