Lombok, Interface, Factory Method


1. Lombok

@Builder
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class UserSigninDto {

        . . .

}

위 코드는 프로젝트에서 사용할 DTO 클래스의 일부입니다.

@Getter

getter은 userService에서 유저 정보를 조회할 떄 사용된다.

@Builder 는 다음과 같은 장점이 있습니다.

  1. setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안전성이 보장받기 힘듭니다.
    setter 메소드가 없으므로 변경 불가능 객체를 만들 수 있다.
  2. 한 번에 객체를 생성하므로 객체 일관성이 깨지지 않는다.
  3. build() 함수가 잘못된 값이 입력되었는지 검증하게 할 수도 있다.

@NoArgsConstructor(access = AccessLevel.PROTECTED)

validation 검사를 위해 필요한 생성자 입니다.

@AllArgsConstructor(access = AccessLevel.PROTECTED)

JPA에서는 프록시를 생성을 위해서 기본 생성자를 반드시 하나를 생성해야합니다.

2. Interface 추상화

인터페이스 사용 장점

3. 팩토리 메소드

public User toEntityWithPasswordEncoder(PasswordEncoder passwordEncoder) {
        return User.builder()
                .email(email)
                .password(passwordEncoder.encode(password1))
                .name(name)
                .phone(phone)
                .profile(profile)
                .userType(Role.ROLE_RESTRICTED)
                .enabled(false)
                .build();
    }

위 코드는 프로젝트에서 사용할 DTO 클래스의 일부입니다.

toEntityWithPasswordEncoder 메소드는
UserSignup 모델 객체로부터 User Entity 객체를 생성해서 리턴합니다.
비밀번호 암호화와 userType, enabled 등 정해져 있는 값을 넣어 생성할 수 있습니다.

장점