'Lombok에서 생성자 없이 사용하기'
그동안 객체를 만들고 나면 직접적으로 사용하기 위해 생성자를 사용하였다.
하지만 이것마저 편하게 해주는 기능이 있었으니...
그것은 바로 @Builder
사용 방법 :
@Builder와 @NoArgsConstructor를 함께 사용하려면,
@AllArgsConstructor도 함께 사용하거나 모든 필드를 가지는 생성자를 직접 만들어 줘야 한다.
@Builder를 사용할 때 @NoArgsConstructor뿐만 아니라 손수 만든 다른 생성자가 있다면, 그 때도 모든 필드를 가지는 생성자가 필요하다.
엔티티 파일 (Product.java)
import com.sun.istack.NotNull;
import com.teckstudy.book.domain.entity.enums.ProductType;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter @Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long product_sn;
@Column(length = 30)
private String product_name;
@Enumerated(EnumType.STRING)
private ProductType product_option;
@Column(length = 11)
@NotNull
private Integer price;
@Column(length = 10)
private Integer stock_cnt;
}
@Builder없이 기존 구현 한 생성자로 만든 소스 (직접 넣어주는 사례가 발생)
Product product1 = new Product("오라클과 SQL", ProductType.RADIO, 50000, 30);
Product product2 = new Product("Real Mysql", ProductType.CHECK, 35000, 50);
productRepository.save(product1);
productRepository.save(product2);
@Builder를 이용한 리팩토링
String[] bookList = {"해리포터", "반지의 제왕", "이것이 자바다", "기분이 없는 기분"};
for(int i=0; i<bookList.length; i++) {
Product product= Product.builder()
.product_name(bookList[i])
.product_option(random.nextInt(2) % 2 == 0 ? ProductType.RADIO : ProductType.CHECK)
.price(Integer.valueOf(random.nextInt(99999)+1))
.stock_cnt(Integer.valueOf(random.nextInt(99)+1))
.build();
productRepository.save(product);
}
'SPRING > 개발 TIP' 카테고리의 다른 글
[SPRING] AOP 정리 및 실습 (2) (0) | 2021.04.14 |
---|---|
[SPRING] AOP 정리 및 실습 (1) (0) | 2021.04.14 |
[SPRING] Spring Security (2) 기본 권한 설정 (0) | 2021.03.03 |
[SPRING] Spring Security (1) 서버 구축하기 (0) | 2021.03.03 |
[SPRING] JPA Querydsl Repository Support 활용 (0) | 2021.02.27 |