-
FINAL 키워드의 집착을 버려본다.학습/개발노트 2022. 10. 14. 00:07
final
변수가 불변이라는 사실을 명확하게 알 수 있다.
Builder 패턴을 통해 vo를 불변객체라고 명확하게 알려주었다.
@Getter public class UserInfo { private final Long id; private final String password; private final String name; private final String gradeCode; private final LocalDateTime createdAt; private static final Long PASSWORD_MIN_LENGTH = 6L; private static final Long PASSWORD_MAX_LENGTH = 18L; @Builder public UserInfo(Long id, String password, String name, String gradeCode, LocalDateTime createdAt) { this.id = id; this.name = Objects.requireNonNull(name); validatePassword(password); this.password = Objects.requireNonNull(password); this.gradeCode = gradeCode == null ? GradeCode.USER.getTitle() : gradeCode; this.createdAt = createdAt == null ? LocalDateTime.now() : createdAt; } void validatePassword(String password) { Assert.isTrue(password.length() >= PASSWORD_MIN_LENGTH, "최소 길이 미만입니다."); Assert.isTrue(password.length() <= PASSWORD_MAX_LENGTH, "최대 길이를 초과했습니다."); } }
문제점
Mybatis를 사용하게 되면 기본 생성자가 필요하다.
public UserInfo() { id = null; password = null; name = null; gradeCode = null; createdAt = null; }
이렇게 되면 코드는 가독성이 좋은가?
별로 좋지 않은것 같다.
따라서 Setter가 없는 것 만으로도 불변객체를 확인할 수 있으므로 final을 키워드를 제외하고 @NoArgsConstructor를 선언해 주었다.
'학습 > 개발노트' 카테고리의 다른 글
[JWT] 어디에 저장하는게 좋을까? (1) 2022.10.28 OAUTH 2.0 정리 (0) 2022.10.19