728x90
일반적인 DTO 클래스
일반적인 DTO 클래스를 정의할 때는 여러 메서드를 수동으로 작성해야 합니다. 예를 들어, 사용자 정보를 담는 UserDto 클래스를 살펴보겠습니다.
public class UserDto {
private final UUID id;
private final String name;
private final String email;
public UserDto(UUID id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public UUID getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
@Override
public String toString() {
return "UserDto{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof UserDto)) return false;
UserDto userDto = (UserDto) o;
return Objects.equals(id, userDto.id) &&
Objects.equals(name, userDto.name) &&
Objects.equals(email, userDto.email);
}
@Override
public int hashCode() {
return Objects.hash(id, name, email);
}
}
물론 @AllArgsConstructor, @ToString 어노테이션 등 다른 어노테이션을 사용한다면 위 코드에 비해서 간결한 코드를 작성할 수 있지만 비교를 위해 추가하지 않았습니다.
Record 클래스
public record UserDto(UUID id, String name, String email) {
// 필요한 경우 추가 메서드를 정의할 수 있습니다.
}
위코드는 동일한 기능을 가진 record 클래스입니다. record 클래스는 코드가 훨씬 간결해집니다.
일반적인 DTO와 Record 클래스의 비교
특징 | 일반적인 DTO 클래스 | Record 클래스 |
코드 길이 | 필드, 생성자, 여러 메서드 수동 정의 필요 | 필드와 생성자만 정의, 자동 생성된 메서드 |
불변성 | final 키워드로 설정해야 함 | 기본적으로 불변 (모든 필드가 final) |
자동 생성 메서드 | toString(), equals(), hashCode() 수동 정의 필요 | 자동으로 생성 |
복잡성 | 코드가 길어지면 가독성이 떨어질 수 있음 | 코드가 간결하고 가독성이 좋음 |
상속 | 일반 클래스처럼 상속 가능 | 상속 불가 |
Record 클래스의 장점
간결함
- DTO 클래스를 정의할 때 필요한 코드 양이 대폭 줄어듭니다.
- record 클래스는 필드만 선언하면 나머지 메서드는 자동으로 생성되므로, 작성해야 할 코드가 줄어들어 가독성이 높아집니다.
불변성
- record 클래스는 모든 필드가 기본적으로 final로 설정되어 불변 객체를 생성합니다.
- 이는 데이터의 무결성을 보장하고, 스레드 안전성을 제공합니다.
자동 생성된 메서드
- record 클래스를 정의하면 toString(), equals(), hashCode() 메서드가 자동으로 생성되므로, 이러한 메서드를
수동으로 작성할 필요가 없어집니다.
명확한 의도
- record 클래스는 데이터 전송을 위해 설계된 것으로, 코드 읽는 사람이 DTO의 의도를 쉽게 이해할 수 있습니다.
결론적으로 record 클래스는 DTO를 정의할 때 많은 장점을 제공합니다.
코드의 간결성과 불변성을 동시에 갖추고 있어, 데이터 전송 객체(DTO)를 작성하는 데 있어 매우 유용합니다. 특히 복잡한 데이터 구조를 다루는 대규모 프로젝트에서 record 클래스를 활용하면 코드의 유지보수성과 가독성을 크게 향상시킬 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.10.27 - 고객과 디자이너의 매칭을 위한 게시글 정렬 시스템 개선 방안 고민해보기 (0) | 2024.10.27 |
---|---|
[TIL, 일일 회고] 2024.10.26 - 로컬 개발 환경과 운영 환경을 위한 Logback 설정 (0) | 2024.10.26 |
[TIL, 일일 회고] 2024.10.24 - DTO 설계에서 중첩 클래스 활용의 장단점 분석 (0) | 2024.10.24 |
[TIL, 일일 회고] 2024.10.23 - Spring boot Swagger 주요 어노테이션 (0) | 2024.10.23 |
[TIL, 일일 회고] 2024.10.22 - S3 확장자 에러 처리하기 (0) | 2024.10.22 |