Lombok, Interface, Factory Method
1. Lombok
@Builder
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class UserSigninDto {
. . .
}
위 코드는 프로젝트에서 사용할 DTO 클래스의 일부입니다.
@Getter
getter은 userService에서 유저 정보를 조회할 떄 사용된다.
@Builder
는 다음과 같은 장점이 있습니다.
- setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안전성이 보장받기 힘듭니다.
setter 메소드가 없으므로 변경 불가능 객체를 만들 수 있다. - 한 번에 객체를 생성하므로 객체 일관성이 깨지지 않는다.
- 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 등 정해져 있는 값을 넣어 생성할 수 있습니다.
장점
-
이름을 가질 수 있다.
생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다.
하지만 팩토리 메소드 이름을 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. -
입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
-
간결한 코드 작성이 가능하다.
반복되는 코드를 줄일 수 있다.