본문 바로가기
내일배움캠프

내일배움캠프 TIL - DTO를 클래스에서 record로

by Kiwimel0n 2024. 1. 23.

오늘 개인과제로 Spring API CRUD를 구현하는 과제를 진행하였다.

진행을 하면 서 DTO Data Transfer Object 라는 Entity에 바로 접근을 시키는 것이 아닌 데이터를 전달 시켜주는 객체로

Spring MVC 구조의 사이에 dto를 실행시켜주어 안전하게 데이터들을 주고 받을 수있게한다.

 

기본적으로 DTO를 만들려면 요청하는 RequestDto 와 요청받은 것을 반환해주는 ResponseDto 두개를 생성해야한다.

 

처음으로 배웠던 Dto 생성법은

@Getter
@AllArgsConstructor
public class ScheduleRequestDto(){
    String taskName;
    String contents;
    String manager;
}

@Getter와 @AllArgsConstructor 에노테이션을 이용한 생성 방법이고

 

두번째로는

@Getter
public class ScheduleRequestDto {
    private final String taskName;
    private final String contents;
    private final String manager;
}

@Getter 에노테이션과 final키워드를 사용한 불변성 Dto 생성방법

 

 

세번째로는 

@Value
public class ScheduleRequestDto {
    String taskName;
    String contents;
    String manager;
}

@Value 에노테이션을 활용한 불변성 Dto 생성 방법이다 .Value 에노테이션을 사용하면 final 키워드를 사용하지않아도 필드들이 불변성을 가지고 자동으로 Getter, equals, hashCode, toString 메서드도생성된다.

 

 

하지만 Java 16부터 도입된 record를 사용하면 간편하게 불변성 값 객체를 갖는 Dto를 생성할 수 있다.

record는 클래스의 간결한 형태로 불변성, equals, hashCode, toString 등을 자동으로 처리해준다.

record를 사용하면 자동으로 생성자, equals, hashCode, toString 메서드가 생성되며, 필드들은 불변성을 가지게 된다.

public record ScheduleRequestDto(
        String taskName,
        String contents,
        String manager,
        int password
){

}


// 외로 System.out.println(dto.taskName()); // Getter 메서드
//	System.out.println(dto); // toString() 메서드

record를 사용하면 코드가 간결해지고, 불필요한 코드 작성을 피할 수 있습니다. 다만, record는 불변성을 지향하기 때문에 필요에 따라 가변성이 필요한 경우에는 record 대신 class를 사용하는 것이 적절할 수 있다.