레코드(Record)

작성일

레코드

Java 14 버전부터 레코드(Record)라는 것을 사용할 수 있게 되었다. (정식 기능은 Java 16 버전)

레코드를 사용하면 불변 데이터 객체를 쉽게 생성할 수 있도록 도와주는 새로운 유형의 클래스이다.

기존의 불변 데이터 객체

public class Member {
    
    private final String email;
    private final String name;

    public Member(String email, String name) {
        this.email = email;
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }
}

불변 객체를 생성하기 위해 아래와 같이 많은 코드를 작성해야 한다.

  1. 모든 필드에 final을 사용하여 정의
  2. 필드 값을 모두 포함한 생성자
  3. 모든 필드에 대한 Getter
  4. toString 재정의
  5. 인스턴스를 비교하기 위한 hashCode, equals 재정의

요즘은 IDE에서 자동으로 생성하는 기능이 있다. 하지만, 새 필드를 추가할 때 자동으로 업데이트하지는 못한다.

이러한 단점을 레코드를 사용해서 해결할 수 있다.

레코드를 이용한 불변 객체

public record Member(String email, String name) {}

레코드 클래스를 사용하면 훨씬 간결한 방식으로 불변 객체를 정의 할 수 있다.

생성자를 작성하지 않아도 되고 toString, equals, hashCode 메소드에 대한 구현을 자동으로 제공한다.

레코드의 제한

  • 레코드는 암묵적으로 final 클래스이므로 상속이 불가
  • abstract 선언 불가
  • 다른 클래스를 상속(extends) 받을 수 없음, 인터페이스 구현(implements)은 가능

카테고리: