Spring/additional

[Spring] Builder 패턴(Lombok 활용)

sujin7837 2021. 2. 14. 23:09
반응형

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가 아니더라도 해당 클래스를 객체로 생성할 때 필수적인 필드가 있다면 활용할 수 있습니다.

 

 

출처: zorba91.tistory.com/298

반응형