NutritionFacts 객체를 생성하기 위해서는 아래와 같이 직관적으로 코드를 작성하면 됩니다.
1
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).build();
선택 인자 중에서도 fat과 carbohydrate은 기본값을 사용하고 싶으면 단순히 .fat().carbohydrate() 를 호출하지 않으면 됩니다.
만약 일반적인 생성자 패턴으로 위 객체를 만드려면 아래와 같이 생성해야 하는데 인자가 많은 경우, 특히 동일한 타입으로 된 인자가 많은 경우 순서가 헷갈려 버리면 ** 컴파일 에러나 런타임에러가 발생하지 않고 정상적으로 프로그램이 도는것 처럼 보이지만 사실은 잘못된 데이터가 쌓이고 있는 ** 엄청난 버그가 발생할 수 도 있습니다.
1
NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 0);
빌더패턴의 단점은 객체를 생성자로 바로 생성하는것이 아니고 빌더객체를 먼저 생성하고 그 빌더객체로 다시한번 새 객체를 반환하기 때문에 이 과정에서의 오버헤드가 문제가 될 수 있습니다.
(대부분의 상황에서는 이정도의 오버헤드가 문제가 되지는 않겠지만) 속도에 매우 민감한 프로그램에서는 빌더패턴으로 객체를 생성하는것을 재고해봐야 할 수도 있습니다.