bong-u/til

Record

수정일 : 2024-11-15

레코드란

  • 불변(immutable) 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스
  • JDK16부터 지원

예제

  • Record 적용 전

     1public class Person {
     2    private final String name;
     3    private final int age;
     4
     5    public Person(String name, int age) {
     6        this.name = name;
     7        this.age = age;
     8    }
     9
    10    public String getName() {
    11        return name;
    12    }
    13
    14    public int getAge() {
    15        return age;
    16    }
    17}
    
  • Record 적용 후

    1public record Person(String name, int age) {}
    

Record에서 지원하는 것

  • Constructor, Getter, equals(), hashcode(), toString()

Record의 제약 사항

  • 다른 클래스를 상속 받을 수 없다, 구현(implements)는 가능
  • static field만 선언 가능하다 (instance field 불가능)
  • 각 field는 private final로 정의된다

Record에서 할 수 있는 것

  • 컴팩트 생성자 : 매개변수가 없는 생성자, validate 사용시 적합
    1public record Person(String name, int age) {
    2    public Person {
    3        Objects.requireNonNull(name);
    4        Objects.requireNonNull(age);
    5    }
    6}