이펙티브 자바/2장 객체 생성과 파괴

아이템 2 생성자에 매개변수가 많다면 빌더를 고려하라

말랑공룡 2023. 12. 18. 08:59

 

- 점층적 생성자 패턴도 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다.

- 자바빈즈 패턴은 더 읽기 쉬운 코드지만 객체 하나를 만드는데 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성(consistency)이 무너진 상태에 놓이게 된다.

- 이러한 단점을 완화하고자 생성이 끝난 객체를 수동으로 '얼리고(freezing)', 얼리기 전에는 사용할 수 없도록 하기도 한다.

- 이런 상황에서 나온 대안이 빌더 패턴(Builder pattern)이다.

 

<빌더 패턴의 유효성 검사>

  • 빌더의 생성자와 메서드에서 입력 매개변수를 검사하고, build 메서드가 호출하는 생성자에서 여러 매개변수에 걸친 불변식(invariant)을 검사하자.

 

<빌더 패턴 사용 시 유의점>

  • 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있다.
  • 코드가 장황해서 매개변수가 4개 이상은 되어야 값어치를 한다. 하지만 API는 시간이 지날수록 매개변수가 많아지는 경향이 있다.