Record 란 뭘까?
불변 데이터를 쉽게 선언하고 사용할 수 있도록 해주는 특수한 형태의 클래스입니다. 이는 record 가 필드, 생성자, equals(), hashCode(), toString() 메소드를 자동으로 생성해주기 때문이죠. 따라서 코드를 간결하게 유지 할 수 있다는 장점이 있습니다.
// 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();
}
}
Java
복사
하지만 record 의 경우 상태가 생성시에 결정되고 이후에 변경할 수 없습니다. 따라서 상태를 변경하는 등의 custom 이 필요한 경우 DTO 를 사용해야 합니다. 특정 필드에 패턴을 걸거나, 유저의 특정 부분만 변경해야할 경우를 예로들 수 있습니다.
@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;
}
Java
복사