Post

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.