자바의 Record 란?
- 자바 17 에서 Stable 이 된 데이터 클래스다.
- 클래스 정의 시에 보일러 플레이트 코드를 줄이기 위해 탄생했다.
기능
불변 (final
처리)
- 클래스와 모든 필드가
final
처리 된다. - 한번 생성하면
record
의 상태는 바뀌지 않는다.
간결한 메서드 자동 생성
getter
,equals()
,hashCode()
,toString()
메서드를 자동으로 생성한다.
생성자 자동 생성
- 모든 필드를 매개변수로 사용하는 생성자를 자동으로 생성해준다.
예제
- 아래 코드는 1줄이지만, 클래스와 모든 필드가
final
처리되어 있다. - 매개변수에 있는
field1
과field2
가 필드가 된다. getter
,equals()
,hashCode()
,toString()
메서드도 생성된 상태다.- 모든 필드를 사용하는 생성자도 자동으로 생성된 상태이다.
public record MyRecord(String field1, Integer field2) { }
위의 코드를 풀어쓰면 대략 아래와 같은 코드가 나온다.
public class MyRecord {
private final String field1;
private final String field2;
public MyRecord(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
public String getField1() {
return field1;
}
public String getField2() {
return field2;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyRecord myRecord = (MyRecord) o;
return Objects.equals(field1, myRecord.field1) && Objects.equals(field2, myRecord.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
}
용례
- 로직이 따로 들어가지 않고 데이터를 묶기 위한 클래스에 적합하다.
- DTO, 불변 데이터 구조체, 스위치 표현문의 패턴 매칭, 함수형 인터페이스 코딩 등
한계
- 가변성이 없음
- 상태를 변경시켜야 할 경우 쓸 수 없다
반응형
'Java > 자바 잡지식' 카테고리의 다른 글
자바 예외의 종류와 특징 (0) | 2023.10.08 |
---|---|
자바 리플렉션 (Reflection) 이란? (0) | 2023.06.26 |
자바의 ThreadLocal 이란? (0) | 2023.06.23 |
자바 Stream 에 size() 혹은 length 프로퍼티가 없는 이유 (0) | 2023.03.31 |
자바 함수형 인터페이스 혹은 람다 인터페이스란? (0) | 2023.03.29 |