✅ 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에 사용하면 좋습니다
- 일시적으로 데이터를 저장할 때 사용합니다
- 데이터를 저장하고싶지만 긴 코드를 작성하고 싶지는 않을 때 사용하면 좋습니다
- 불변적인 데이터를 저장할 때 적합합니다