ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.