Record 와 DTO
자바 버전을 올렸는데 Record 가 생겼어요.
1. Record 란 뭘까?
불변 데이터를 쉽게 선언하고 사용할 수 있도록 해주는 특수한 형태의 클래스입니다. 이는 record 가 필드, 생성자, equals(), hashCode(), toString() 메소드를 자동으로 생성해주기 때문이죠. 따라서 코드를 간결하게 유지 할 수 있다는 장점이 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// record 선언
public record SMSMessageDTO(String username, String phoneNumber) {}
// 사용
public void verificationUser(SMSMessageDTO smsMessageDTO){
// builder 패턴을 사용할 필요없이 간단하게 사용 가능 합니다.
String username = smsMessageDTO.username();
String phoneNumber = smsMessageDTO.phoneNumber();
Optional<User> user = userRepository.findUserByUsernameAndPhoneNumber(username, phoneNumber);
if(user.isPresent()) {
throw new EntityExistsException();
}
}
하지만 record 의 경우 상태가 생성시에 결정되고 이후에 변경할 수 없습니다. 따라서 상태를 변경하는 등의 custom 이 필요한 경우 DTO 를 사용해야 합니다. 특정 필드에 패턴을 걸거나, 유저의 특정 부분만 변경해야할 경우를 예로들 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SignUpRequest{
private String email;
@Pattern(regexp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{8,}$")
private String password;
private String nickname;
private String username;
private String birthday;
private String phoneNumber;
}
This post is licensed under
CC BY 4.0
by the author.