Record

헨도·2024년 6월 27일
0

SpringBoot

목록 보기
4/23
post-thumbnail

Record

  • 값의 집합으로 이루어진 간단한 객체를 간단하게 개발하기위해 고안된 Class
  • immutable data (불변 데이터) 를 다룰 class 구현에 최적화되어있다.
  • 웹 서비스 구현에서 많이 사용되는 DTO 개념에 적용하면 유용하다.
  • 생성자, getter(), equals(), hashcode(), toString() 등 DTO 특성의 클래스를
    개발할 때 매번 개발자가 직접 구현해야했던 반복적인 작업이 불필요하다.
    또, '이 클래스는 data carrier 용도이다.' 를 명시적으로 나타낼 수 있으므로 이해를 돕고 해당 클래스의 목적에 맞지 않는 구현을 하지 않도록 방지할 수 있다.

Record 특징

  • final 클래스이므로 다른 클래스를 상속하거나 상속시킬 수 없다.
  • 자동 생성 accessors(getter) 함수는 인스턴스 멤버 변수 이름과 동일하다.
  • Record 클래스의 접근제어자는 public, package-private 만 가능하다.
  • Record 생성자의 접근제어자는 클래스의 접근제어자보다 제한된 수준이어서는 안된다.

DTO 클래스에 record 클래스가 적합한 이유

데이터를 한쪽에서 다른 한쪽으로 전달하기 위해서만 사용되는 데이터 전송 객체(혹은 DTO) 를 제대로 구현하기 위해서는 getter, equals, hashcode, toString 처럼 계속 똑같은 구조의 코드를 반복해서 작성해야 했다.

우리는 lombok의 @Getter를 통해 대체하고 있지만..

@Getter
@NoArgsConstructor
public class PassDto {
	Long id;
    String name;
    Integer count;
}

Record 선언 방법

record 레코드명 (컴포넌트1, 컴포넌트2, ... ) { }

실제 코드 적용 전

@Getter
@NoArgsConstructor
public class PassDto {
	Long id;
    String name;
    Integer count;
    Integer price;
    
    public PassDto (Long id, String name, Integer count, Integer price) {
    	this.id = id;
        this.name = name;
        this.count = count;
        this.price = price;
    }
}

실제 코드 적용 후

public record PassDto (
	Long id,
    String name,
    Integer count,
    Integer price
) {

}
profile
Junior Backend Developer

0개의 댓글