본문 바로가기

Back-end/Java

[JAVA] Record Class

 

✅ Record은 무엇인가?

  • Record는 enum과 같은 특별한 형태의 class
  • 주로 간단하게 데이터를 저장하고 옮기는 역할
  • records는 일반 class와는 다르게 생성자, getter, hashCode(), equals() ,toString()를 제공
  • custom이 필요하다면 record안에 정의해서 사용가능

✅ 기존코드

public class SampleRecord {
   private final String name;
   private final Integer age;
   private final Address address;
 
   public SampleRecord(String name, Integer age, Address address) {
      this.name = name;
      this.age = age;
      this.address = address;
   }
 
   public String getName() {
      return name;
   }
 
   public Integer getAge() {
      return age;
   }
 
   public Address getAddress() {
      return address;
   }
}

 

 

✅ Record클래스

public record SampleRecord(
   String name,
   Integer age,
   Address address
) {}

 

  • 엄청 간결해졌고 getter뿐만아니라 equals(), hashCode() 메서드도 자동 제공되서 저렇게만 써도 같은 효과를 제공한다.

✅ 특징

  • 생성자는 모든 field를 포함
  • toString()도 모든 field를 포함
  • equals(), hashCode() 메서드는 invokedynamic based mechanism을 사용
  • getter는 field이름과 유사한 이름으로 생성됩니다 ex) id(), email()..
  • 기본적으로 java.lang.Record class를 상속받기 때문에 다른 class를 상속받을 수 없음
  • class가 final이기 때문에 다른 subclass를 생성할 수 없음
  • 모든 field는 불변이기 때문에 setter는 제공하지 않음

 

 

✏️ 어디서 쓰면 좋을까?

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