Open jaeuk520 opened 4 months ago
public record ApiResponse<T>(Boolean isSuccess, int code, String message,
@JsonProperty(value = "response") T response,
@JsonProperty(value = "errorResponse") ErrorResponse errorResponse) {
}
record를 활용해서 response 를 만들어도 좋을것 같네요
Record
Feature
private final
로 선언된다.getter
가 자동으로 생성된다.getter
를 사용할 때는get_()
이 아닌 필드명, 즉 컴포넌트의 이름만 사용하면 된다.ex. name()
public
생성자를 자동으로 생성한다.equals
,hashcode
,toString
을 자동으로 생성한다.보일러 플레이트 코드를 줄일 수 있다!
Record를 Entity에는 적용하지 못하는 이유
hibernate
와 같은jpa
는 프록시 생성을 위해 인수 생성자, non-final 필드, setter 및 non-final 클래스가 없는 엔티티에 의존한다.즉 프록시를 생성하기 위해서 entity는 불변이면 안 된다!
쿼리 결과를 매핑할 때 객체를 인스턴스화 할 수 있도록 매개변수가 없는 생성자가 필요하다.
record
는 매개변수가 없는 생성자를 제공하지 않는다. (record
는 불변 객체이기 때문에setter
를 사용할 수 없으며 이로 인해 모든 필드의 값을 입력한 후에 생성할 수 있다.)getter
가 필수 명명 규칙을 따르지 않는다.getter
,setter
에 접근할 수 없다.JPA Entity의 기본 생성자가 필수인 이유:
Reflection API:
Record를 DTO에 적용해보자
record
는 한 번 값이 정해지고 나면setter
를 통해 값을 변경할 수 없는데, 자바 내부에서 데이터 가공 시 중간에 변질될 우려가 없다!출처: https://velog.io/@power0080/java%EC%9E%90%EB%B0%94-record%EB%A5%BC-entity%EB%A1%9C#1-2-2-record-%ED%8A%B9%EC%A7%95