item2) 생성자에 매개변수가 많다면 빌더를 고려하라

생성자에 매개변수가 많을 때에는 빌더 패턴을 사용하자!

점층적 생성자 패턴

  • 필수 매개변수만 받는 생성자부터 선택 매개변수를 1~n개 받는 생성자들을 모두 선언해 사용하는 방식

  • 매개변수의 개수가 많아지면 점층적 생성자 패턴으로도 클라이언트 코드를 작성하거나 읽기 어렵다.

  • 클라이언트가 실수로 매개변수의 순서를 바꾸어 건네주는 경우 런타임에 엉뚱한 동작을 하게 된다.

자바빈즈 패턴

  • 매개변수가 없는 생성자로 객체를 만든 후(클래스 변수들은 내부에서 기본값으로 초기화), setter 메서드 호출해 원하는 매개변수의 값을 설정하는 방식

  • 객체가 완전히 생성되기 전까지는 일관성이 무너지고, 클래스를 불변으로 만들 수 없다.

빌더 패턴

  • 클래스 내부에 정적 멤버 클래스로 빌더를 만들어둔다.

  • 필요한 객체를 클라이언트가 직접 만드는 대신 필수 매개변수만으로 생성자를 호출해 빌더 객체 얻는다

  • 이후 빌더 객체가 제공하는 setter 메서드로 원하는 선택 매개변수만 설정한다.

  • 매개변수가 없는 build() 메서드 호출해 필요한 최종 객체를 얻는다.

  • 잘못된 매개변수를 검사하려면 다음 두 방식을 사용할 수 있다.

    • 1) 빌더의 생성자와 메서드에서 입력 매개변수 검사

    • 2) build 메서드가 호출하는 생성자에서 여러 매개변수가 걸친 불변식을 검사

  • 계층적으로 설계된 클래스와 함께 쓰기 좋다 (추상 클래스와 하위 클래스가 각각 빌더를 갖도록 하여 사용)

  • 가변인수 매개변수를 여러 개 사용할 수 있다.

  • 객체를 만들기 위해 빌더 객체부터 만들어야 하므로 성능 상 문제 발생할 수도 있다.

  • 매개변수가 점점 많아질 경우 좋다. (일반적으로 매개변수가 점점 많아지므로 처음부터 빌더 패턴 고려할 것)

Last updated