과제 지옥.. 손을 어디부터 봐야하나 후..
단축키
iter - 리스트에 for문 자동생성
- Builder
인자가 많은 경우 setter보다 builder가 유용한것 같다.
Builder 장점
- 인자가 많을 경우 쉽고 안전하게 객체를 생성할 수 있습니다.
- 인자의 순서와 상관없이 객체를 생성할 수 있습니다.
- 적절한 책임을 이름에 부여하여 가독성을 높일 수 있습니다.
단점
- 빌더 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있다.
- 코드가 장황해지기 때문에 매개변수가 4개 이상은 되어야 값어치를 한다.
- 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 |