필드 유형과 이름만 필요한, 불변 데이터 클래스이다.
JAVA 14이전, boilerplate field와 메서드가 포함된 클래스를 생성해야 했기에, 의도가 혼동되기 십상이었다. 그러나 record를 사용해 이러한 문제들이 해결되었다.
레코드는 Java14때 preview로, Java16에서 정식 기능으로 포함되었다.
Record의 의의
- 불필요한 boilerplate code 작성을 생략할 수 있다.
- equals, hashcode, toString 메서드 생성
- 각 필드를 받아들이는 생성자가 Java 컴파일러에 의해 자동 생성된다
- 반복적인 데이터 클래스를 레코드로 대체할 수 있다.
- 필드 유형과 이름만 필요한, 불변 데이터 클래스
- private, final field, public constructor 자동 생성
Constructor
- record생성시, 각 필드 argument가 있는 public constructor 생성된다.
- 이 생성자는 클래스와 같은 방식으로, 레코드로부터 객체를 인스턴스화하는데 사용 가능하다.
Getter
- record.name()
- getName()과 같이, name()처럼 필드 이름 자체로 접근이 가능하다.
Equals
- True 반환 조건
- 객체 유형 동일시
- 모든 필드 값 일치시
hashCode
- True 반환 조건
- 필드 값이 모두 일치하는 경우
toString
- 레코드의 이름
- 각 필드이름
- 및 대괄호 안의 해당 값 포함된 문자열 반환
레코드 제약사항
상태 설명만으로 표현을 정의할 수 있음을 보장한다.
- 레코드는 다른 클래스 상속 불가
- private final fiedls 외의 인스턴스 필드 선언 불가
- 선언되는 다른 모든 필드는 static
레코드는 암시적으로 final이며, abstract일 수 없다.
- 레코드의 api가 상태 설명에 의해서만 정의되며, 나중에 다른 클래스에 의해 변경되거나 나아질 수 없음을 강조한다.
외에도..
- 최상위 레벨로 선언x
- 중첩 가능
- 제네릭 가능
- 인터페이스 구현 가능
- 새 키워드로 인스턴스화 가능 등
일반 클래스처럼 작동한다.
레코드 body는 static 메서드, static 필드, static 이니셜라이저, 생성자, 인스턴스 메서드 및 중첩 타입을 선언할 수 있습니다.
'Java&Kotlin' 카테고리의 다른 글
[Java] Stream & Lambda - Stream (0) | 2024.06.26 |
---|---|
[Java] Stream & Lambda - Lambda (0) | 2024.06.25 |
[JAVA] Optional : 안전한 null 처리 방법 (0) | 2024.06.12 |
[Java & Intellij IDEA] Java 22 & Gradle 8.7 (0) | 2024.05.28 |
[Gradle] build.gradle dependencies 블록 설명 (0) | 2024.04.21 |