본문 바로가기
이펙티브자바

[이펙티브 자바]아이템2 생성자에 매개변수가 많다면 빌더를 고려하라

by 순원이 2023. 7. 13.

생성자와 정적 팩터리는 매개변수가 많을 때 적절히 대응하기 어렵다.

매개변수가 많을 때 문제

  • 순서가 바뀌게 된다면 컴파일러는 알아채지 못 한다.
  • 매개 변수가 몇 개인지도 알아야 한다.

많은 선택적 매개변수를 처리하기 위해 아래 두 가지 패턴이 사용되었다.

  • 점층적 생성자 패턴
  • 자바빈즈 패턴
    • 불변성 문제
      • 또한 완전히 생성된 객체라고 하더라도 외부적으로 세터 메소드를 노출하고 있으므로, 불변함을 보장할 수 없게된다. 즉, 자바빈즈 패턴을 사용하면 클래스를 불변으로 만들 수 없다.

점층적 생성자 패턴의 안전성 + 자바빈즈 패턴의 가독성 ⇒ 빌더 패턴

빌더 패턴의 단점

빌더 패턴도 장점만 존재하지는 않다. 선택적 매개변수를 많이 받는 객체를 생성하기 위해서는 먼저 빌더 클래스부터 정의해야한다. 빌더의 생성비용이 크지는 않지만, 성능에 민감한 상황에서는 문제가 될 수 있다고 한다.

또한 매개변수가 4개보다 적다면, 점층적 생성자 패턴을 사용하는 것이 더 좋다고 한다. 빌더 패턴의 코드가 다소 장황하기 때문이다. 하지만, API 는 시간이 지날수록 많은 매개변수를 갖는 경향이 있다. 따라서 애초에 빌더 패턴으로 시작하는 편이 나을 때가 많다고 한다.