본문 바로가기

강의/Design pattern

빌더 (Builder) 패턴

SMALL

https://velog.io/@sillutt/%EB%B9%8C%EB%8D%94-Builder-%ED%8C%A8%ED%84%B4

 

빌더 (Builder) 패턴

빌더 패턴

velog.io

빌더 패턴

다양한 구성으로 만들어지는 인스턴스에 대해서 동일한 프로세스를 통해 만들 수 있게 도와주는 패턴. 객체를 만드는 프로세스를 독립적으로 분리할 수 있다.

Director를 추가하여 빌더를 사용하면 반복되는 호출 스택을 빌더 내에 숨기고 client는 Director를 통해서 객체를 받아 사용할 수 있다.

Builder class / interface

public interface TourPlanBilder {
	TourPlanBuilder title (String title);
    TourPlanBuilder nightAndDays (int nights, int days);
    //...
    
    //값의 세팅 상태, 인스턴스 상태를 검증할 수 있음
    TourPlan getPlan();
}

public class DefaultTourBuilder implements TourPlanBuilder {
	// private fields
    
    @Override
    public TourPlanBuilder nightsAndDays(int nights, int days) {
    	this.nights = nights;
        this.days = days;
        return this;
    }
    
    @Override
    public TourPlan getPlan() {
    	return new TourPlan(title, nights, days, startDate, whereToStay, plans);
    }
}

main class

public class App {
	public static void main(String[] args) {
    	TourPlanBuilder builder = new DefaultTourBuilder();
        builder.title("titile")
        		.nightAndDays(2, 3)
                .startDate(localDate.of(2020, 12, 9))
                .whereToStay("stay")
                .addPlan(0, ",,,")
                .getPlan();
        
        TourPlan longBeachTrip

main에서 구현한 코드들을 builder 클래스로 이동하고 main App 클래스에서는 TourPlan tourPlan = director.메소드이름 형식으로 호출하여 wrapping할 수 있다.

장단점

장점

  • 만들기 복잡한 객체를 순차적으로 만들 수 있게 도와준다.
  • 동일한 프로세스를 거쳐 새로운 인스턴스를 만들 수 있다.
  • 불완전한 객체를 사용하지 않도록 하는 안전장치의 역할을 한다.

단점

  • director와 builder를 함께 사용해야 한다.
  • 구조가 기존에 비해 복잡하다.

사용 예

  • StringBuilder, StringBuffer
  • StringBuilder는 Synchronized를 사용하지 않음
  • Stream API

Think - Java Generic

Stream<String> names = Stream.<String>builder().add("name").add("type").build();
  • Lombok
    @Builder를 적용하여 컴파일 시 Annotation 프로세서를 수행한다.
  • Spring : URIComponents
    URI를 안전하게 만들 수 있다.
SMALL

'강의 > Design pattern' 카테고리의 다른 글

어댑터 (Adapter) 패턴  (0) 2022.08.16
프로토타입 (Prototype) 패턴  (0) 2022.08.16
추상 팩토리 (Abstract factory) 패턴  (0) 2022.08.16
팩토리 메소드 (Factory method) 패턴  (0) 2022.08.16
싱글톤(Singleton) 패턴  (0) 2022.08.16