본문 바로가기
프로젝트/장애인 PT 플랫폼, PTFD

@builder/ 모든 생성자

by 임지혁코딩 2024. 4. 3.

정보처리기사를 공부하며 , 빌더 패턴이라는 패턴을 확인하였다. 

실제로 프로젝트를 위한 협업을 진행하며 @builder라는 어노테이션을 확인하였고, 어떨때

생성자 대신 해당 @builder를 사용하는지, 그 이유는 무엇인지 정리하기로 하였다.

 

@builder의 장점

 

<원하는 값만 넣을 수 있고, 다른 사람이 코드를 봤을때 명확하다.>

 

@Table(name = "product")
@Entity
@Getter
@RequiredArgsConstructor
@AllArgsConstructor
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "product_id")
    private Long productId ;

    @Column(name = "product_name")
    private String productName;

    @Column(name = "price")
    private int price ;

 

이게 내가 만들었던 코드. Allrequiredconsturctor로 생성자를 열면

  Product = new Product(1,"햄버거",12000,3,4,5) 이렇게 보기 복잡하게 객체를 초기화 해야 한다. 

 

@Builder
public Product(String productName, int price, byte[] imageProduct, byte[] imageReal, LocalDate createAt, int categoryId, LocalDate expireAt, String nickName, String userEmail) {
    this.productName = productName;
    this.price = price;
    this.ImageProduct = imageProduct;
    this.ImageReal = imageReal;
    this.createAt = createAt;
    this.categoryId = categoryId;
    this.expireAt = expireAt;
    this.nickName = nickName;
    this.userEmail = userEmail;
}

 

이게 변환된 코드 .

 

이것을 활요하면 product myproduct = Product.builder().price(12000).productname("햄버거") 등등.. 
1. 보기에도 명확하고
2. 내가 어떠한 값들을 넣을건지도 조정이 가능하다. 

 

Product product = Product.builder() .categoryId(1) .build();

 

만 진행하며, categoryid는 1이고 나머지는 0인 형태가 된다.

이것이 GOF 패턴에서 암기하였던 BUILDER이자, 각 객체를 조힙하는 형태의 장점이다.