반응형
Builder 패턴이란?
복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴입니다. 생성자에 인자가 많을 때는 빌더 패턴을 사용하는 것이 유용합니다.
Builder 패턴의 장점
-객체들마다 들어가야 할 인자가 각각 다를 때 유연하게 사용할 수 있습니다.
-무조건적인 setter 생성을 방지하고 불변 객체로 만들 수 있습니다.
-필수 argument를 지정할 수 있습니다. ex) 기본키 역할을 할 id
Builder 패턴의 작성
Builder 패턴을 적용할 클래스
@Builder(builderMethodName="shoppingCheckListBuilder")
@AllArgsConstructor(access=AccessLevel.PRIVATE)
@ToString
public class ShoppingCheckList {
private Long id;
private String shoppingList;
private String discountTicket;
private String creditCard;
private String miniBag;
public static ShoppingCheckListBuilder builder(Long id) {
if(id==null) {
throw new IllegalArgumentException("필수 파라미터 누락");
}
return shoppingCheckListBuilder().id(id);
}
}
확인용 클래스(Buider 패턴을 실제로 사용)
publc class MainClass {
public static void main(String[] args) {
ShoppingCheckList shoppingCheckList=ShoppingCheckList.builder(165L)
.shoppingList("clothes, shoes")
.discountTicket("Valentine discount ticket")
.creditCard("Kookmin card")
.minibag("clothes bag")
.build();
System.out.println("빌더 패턴 적용하기 : "+shoppingCheckList.toString());
}
}
결과: 빌더 패턴 적용하기 : ShoppingCheckList(id=1, shoppingList=clothes, shoes, discountTicket=Valentine discount ticket, creditCard=Kookmin card, minibag=clothes bag)
사용되는 어노테이션과 메소드
- @AllArgsContstructor(access=AccessLevel.PRIVATE) : @Builder 어노테이션을 선언하면 전체 인자를 갖는 생성자를 자동으로 만듭니다. @AllArgsConstructor는 전체 인자를 갖는 생성자를 만드는데, 접근자를 private으로 만들어서 외부에서 접근할 수 없도록 합니다.
- @Builder: 위에서 설명했던 Builder 패턴을 자동으로 생성해주는데, BuilderMethodName에 들어간 이름으로 빌더 메소드를 생성합니다.
- 클래스 내부 builder 메소드: 필수로 들어가야 할 필드들을 검증하기 위해 만들었습니다. 꼭 id가 아니더라도 해당 클래스를 객체로 생성할 때 필수적인 필드가 있다면 활용할 수 있습니다.
반응형
'Spring > additional' 카테고리의 다른 글
[Spring] 스프링이 사랑한 디자인 패턴2 (0) | 2021.02.21 |
---|---|
[Spring] 스프링이 사랑한 디자인 패턴1 (0) | 2021.02.17 |
[Spring Security] UserDetails & GrantedAuthority (0) | 2021.02.14 |
[Spring] Claim 기반 권한 부여 (0) | 2021.02.14 |
[Spring] spring data jpa between (0) | 2021.01.29 |