item2) 생성자에 매개변수가 많다면 빌더를 고려하라
생성자에 매개변수가 많을 때에는 빌더 패턴을 사용하자!
점층적 생성자 패턴
필수 매개변수만 받는 생성자부터 선택 매개변수를 1~n개 받는 생성자들을 모두 선언해 사용하는 방식
매개변수의 개수가 많아지면 점층적 생성자 패턴으로도 클라이언트 코드를 작성하거나 읽기 어렵다.
클라이언트가 실수로 매개변수의 순서를 바꾸어 건네주는 경우 런타임에 엉뚱한 동작을 하게 된다.
자바빈즈 패턴
매개변수가 없는 생성자로 객체를 만든 후(클래스 변수들은 내부에서 기본값으로 초기화), setter 메서드 호출해 원하는 매개변수의 값을 설정하는 방식
객체가 완전히 생성되기 전까지는 일관성이 무너지고, 클래스를 불변으로 만들 수 없다.
빌더 패턴
클래스 내부에 정적 멤버 클래스로 빌더를 만들어둔다.
필요한 객체를 클라이언트가 직접 만드는 대신 필수 매개변수만으로 생성자를 호출해 빌더 객체 얻는다
이후 빌더 객체가 제공하는 setter 메서드로 원하는 선택 매개변수만 설정한다.
매개변수가 없는 build() 메서드 호출해 필요한 최종 객체를 얻는다.
잘못된 매개변수를 검사하려면 다음 두 방식을 사용할 수 있다.
1) 빌더의 생성자와 메서드에서 입력 매개변수 검사
2) build 메서드가 호출하는 생성자에서 여러 매개변수가 걸친 불변식을 검사
계층적으로 설계된 클래스와 함께 쓰기 좋다 (추상 클래스와 하위 클래스가 각각 빌더를 갖도록 하여 사용)
가변인수 매개변수를 여러 개 사용할 수 있다.
객체를 만들기 위해 빌더 객체부터 만들어야 하므로 성능 상 문제 발생할 수도 있다.
매개변수가 점점 많아질 경우 좋다. (일반적으로 매개변수가 점점 많아지므로 처음부터 빌더 패턴 고려할 것)
Last updated