📘 생성자에 매개변수가 많다면 빌더를 고려하라
점층적 생성자 패턴
: 필수 매개변수만 받는 생성자, 필수 매개 변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식
: 확장이 어려움
자바빈즈 패턴
: 매개변수가 없는 생성자로 객체를 만든 후 세터 메서드들을 호출해 원하는 매개변수의 값을 설정하는 방식
: 일관성이 깨지고, 불변으로 만들 수 없음
빌더 패턴
: 클라이언트는 필요한 객체를 직접 만드는 대신 필수 매개변수만으로 생성자(or 정적팩터리)를 호출해 빌더 객체를 얻음
: 점층적 생성자 패턴과 자바빈즈 패턴의 장점만 취함
: 계층적으로 설계된 클래스와 함께 쓰기 좋음
: 성능에 민감한 상황일 경우 빌더 사용이 문제가 될 수도 있음
builder로 객체 생성
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8) .calories(100).sodium(35).carbohydrate(27).build();
핵심정리
- 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 좋음
- 빌더는 클라이언트 코드를 읽고 쓰기 간결하고 안전함