Lombok에서 제공하는 Builder 어노테이션 - hou27/spring-boot-jwt-example GitHub Wiki
@Builder
@Builder
는 생성자, 메서드 그리고 클래스에서 사용할 수 있다.
클래스에서 사용될 경우, 기본적으로 전체 멤버를 대상으로 private 생성자를 만들어 준다.
단, 어떠한 생성자도 선언되지 않았을 경우에 그러하다.
JPA를 사용할 경우 클래스에 반드시 기본 생성자가 필요하다.
그래서 @NoArgsConstructor
를 사용하게 되는데, 이 경우 @Builder
를 사용할 수 없게 된다.
때문에 생성자를 직접 선언하고 @Builder
를 사용하던가
@NoArgsConstructor
와 @AllArgsConstructor
를 모두 클래스에 달아주면 된다.
@Builder.Default
@Entity
@Getter @Setter
@NoArgsConstructor
@ToString
@Builder
public class Users extends CoreEntity {
...
@Enumerated(EnumType.STRING)
@Column(nullable = false)
@Builder.Default
private UserRole role = UserRole.ROLE_CLIENT;
public Users(String email, String password, String name, UserRole role) {
this.email = email;
this.password = password;
this.name = name;
this.role = role;
}
...
}
위 예시에서 사용된 @Builder.Default
는 Builder 사용 시에
기본값을 지정해줄 수 있도록 해준다.
Users.builder()
.email(this.getEmail())
.password(this.getPassword())
.name(this.getName())
.role(this.getRole())
.build();
위와 같이 사용된 경우 지정된 role의 값이 적용되고,
Users.builder()
.email(this.getEmail())
.password(this.getPassword())
.name(this.getName())
.build();
위와 같이 builder 사용 중 role을 따로 지정해주지 않는 경우엔
기본값이 적용되는 것이다.