Record

쓰옹·2023년 1월 28일
0

📙 Java 잡아🤏

목록 보기
22/25

Record 타입

java 14에서 도입된 클래스
간단하게 데이터를 저장하고 옮기는 역할. 데이터의 유형만 갖고있음
데이터를 가진 클래스는
각각의 필드는

  • private final로 정의
  • 필드 전체를 초기화하는 생성자
  • getter

모든 필드가 일치할 때

  • equals 메서드
  • hashCode 메서드

클래스 이름, 각 필드 이름 및 해당 값을 포함하는 toString 메서드
를 만들 수 있다.

  • 예시코드
public class Person {

    private final String name;
    private final String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, address);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (!(obj instanceof Person)) {
            return false;
        } else {
            Person other = (Person) obj;
            return Objects.equals(name, other.name)
              && Objects.equals(address, other.address);
        }
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", address=" + address + "]";
    }

    // standard getters
}

이렇게 되면 많은 사용코드가 생긴다. 각 필드에 대한 동일한 프로세스를 반복해야하고 추가코드로 인해 단순히 name과 address로 person을 나타낸다는 데이터 클래스의 목적을 모호하게 한다. ide가 자동으로 생성해주긴 하지만 필드가 추가될 경우 자동으로 업데이트 되지 못함

Record 클래스는 필드의 유형과 이름만 필요로 하는 불변 데이터 클래스다.
equals, hashCode, toString 메서드와 개인, 최종 필드 및 공용 생성자는 Java 컴파일러에 의해 생성됨

public record Person (String name, String address) {}

특징

  • 불변성
  • final 클래스이라 상속할 수 없음
  • 각 필드는 private final 필드로 정의됨
  • 모든 필드를 초기화하는 RequiredAllArgument 생성자가 생성
  • 각 필드의 getter는 getXXX()가 아닌, 필드명을 딴 getter가 생성된다.(name(), age(), address())
  • static 변수, public / static 메서드를 가질 수 있음

사용

  • DTO(data transfer object)나 domain model class
  • 일시적으로 데이터를 저장할 때
  • 데이터를 저장하고싶지만 긴 코드를 작성하고 싶지는 않을 때
  • 불변적인 데이터를 저장할 때


referernce
https://www.baeldung.com/java-record-keyword
https://velog.io/@rmswjdtn/JAVA-%EB%AC%B8%EB%B2%95-Record-Class

profile
기록하자기록해!

0개의 댓글