본문 바로가기
TIL

항해99_TIL220531 (Builder)

by Hyeongjun_Ham 2022. 5. 31.

과제 지옥.. 손을 어디부터 봐야하나 후..

 

단축키

iter - 리스트에 for문 자동생성

 

- Builder

인자가 많은 경우 setter보다 builder가 유용한것 같다.

Builder 장점

  1. 인자가 많을 경우 쉽고 안전하게 객체를 생성할 수 있습니다.
  2. 인자의 순서와 상관없이 객체를 생성할 수 있습니다.
  3. 적절한 책임을 이름에 부여하여 가독성을 높일 수 있습니다.

단점

  1. 빌더 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있다.
  2. 코드가 장황해지기 때문에 매개변수가 4개 이상은 되어야 값어치를 한다.
  3. API는 시간이 지날수록 매개변수가 많아지는 경향이 있으므로 코드가 더 커질 가능성이 있다.

Builder 예시

    @AllArgsConstructor(access = AccessLevel.PRIVATE)
    @Builder(builderMethodName = "travelCheckListBuilder")
    @ToString
    public class TravelCheckList {

        private Long id;
        private String passport;
        private String flightTicket;
        private String creditCard;
        private String internationalDriverLicense;
        private String travelerInsurance;

        public static TravelCheckListBuilder builder(Long id) {
            if(id == null) {
                throw new IllegalArgumentException("필수 파라미터 누락");
            }
            return travelCheckListBuilder().id(id);
        }
    }

확인용 클래스

    public class MainClass {

        public static void main(String[] args) {
            // 빌더패턴을 통해 어떤 필드에 어떤 값을 넣어주는지 명확히 눈으로 확인할 수 있다!
            TravelCheckList travelCheckList = TravelCheckList.builder(145L)
                    .passport("M12345")
                    .flightTicket("Paris flight ticket")
                    .creditCard("Shinhan card")
                    .internationalDriverLicense("1235-5345")
                    .travelerInsurance("Samsung insurance")
                    .build();

            System.out.println("빌더 패턴 적용하기 : " + travelCheckList.toString());

        }

       // 결과
       // 빌더 패턴 적용하기 : TravelCheckList(id=1, passport=M12345, flightTicket=Paris flight ticket, creditCard=Shinhan card, internationalDriverLicense=1235-5345, travelerInsurance=Samsung insurance)
    }

@AllArgsConstructor(access = AccessLevel.PRIVATE) : @Builder 애노테이션을 선언하면 전체 인자를 갖는 생성자를 자동으로 만든다. @AllArgsConstructor는 전체 인자를 갖는 생성자를 만드는데, 접근자를 private으로 만들어서 외부에서 접근할 수 없도록 만든다.

 

@Builder : 위에서 설명했던 Builder 패턴을 자동으로 생성해주는데, builderMethodName에 들어간 이름으로 빌더 메서드를 생성해준다. 나같은 경우, 혼동을 줄이기 위해 클래스 명과 동일하게 놔두고 Builder로 선언했다.


클래스 내부 builder 메서드 : 필수로 들어가야할 필드들을 검증하기 위해 만들었다. 꼭 id가 아니라도 해당 클래스를 객체로 생성할 때 필수적인 필드가 있다면 활용할 수 있다.

 

출처 : https://zorba91.tistory.com/298

 

[Spring] Lombok을 이용해 Builder 패턴을 만들어보자.

Builder 패턴이란? Effective Java 규칙 2 - 조슈아 블로크 생성자에 인자가 많을 때는 빌더 패턴을 고려하라 빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성

zorba91.tistory.com

 

'TIL' 카테고리의 다른 글

항해99_TIL220602 (테스트 코드)  (0) 2022.06.02
항해99_TIL220601 (연관관계 매핑)  (0) 2022.06.02
항해99_TIL220530 (JWT)  (0) 2022.05.31
항해99_WIL220529 (DI, IoC, Bean)  (0) 2022.05.29
항해99_TIL220528 (JWT)  (0) 2022.05.29