빌더패턴을 왜쓰는가?

빌더패턴의 장점

  1. 생성자의 파라미터가 많은 경우 가독성이 떨어진다.
    • 빌더패턴으로 생성하는 경우 각 값들이 함수로 셋팅이되고, 각각 무슨값들이 어떠한 것을을 의미하는지 파악하기가 수월하다. ex) Bag bag = new Bag("name", 1000, "memo", "20", "30"); vs Bag bag = Bag.builder() ,name("name") ,money(1000) ,memo("memo") ,won(20) ,dolor(30) ,build();
  2. 어떠한 값을 먼저 넣더라도 상관없다(순서x)
    • 생성자의 경우 정해진 파라미터대로 값을 입력해야 정해진 값에 매핑이 되지만, 빌더패던의 경우 필드 이름을 기준으로 값을 삽입하게 때문에 순서를 생각하지 않아도 된다.

빌더패턴 구현

  • @NoArgsConstructor로 기본 생성자의 생성을 방지하고, @Builder를 이용하여 객체의 생성에 유연성을 준다. 이때, 이 2개의 어노테이션을 함께 사용하기 위해서는 @AllArgsConstructor 어노테이션이 필요하다.

이유 : @Build는 위에서 설명한 바와 같이 생성자가 없다면 모든 파라미터를 갖는 생성자를 생성하지만, @NoArgsConstructor로 인해 아무런 생성자를 생성하지 않는다. 이때 build메서드를 사용하여 모든파라미터를 받는 메서드(생성자)를 동작시키면 매칭되는 생성자가 없기때문에 오류를 야기한다. 따라서 @AllArgsConstructor 어노테이션을 추가로 작성하여 해결할 수 있다.

더 깔끔한 방법으로는 직접 생성자를 생성해주고, 빌더 패턴에서 해당 생성자를 사용하도록 하는 방법도 있다.