생성자와 정적 팩터리는 매개변수가 많을 때 적절히 대응하기 어렵다.
매개변수가 많을 때 문제
- 순서가 바뀌게 된다면 컴파일러는 알아채지 못 한다.
- 매개 변수가 몇 개인지도 알아야 한다.
많은 선택적 매개변수를 처리하기 위해 아래 두 가지 패턴이 사용되었다.
- 점층적 생성자 패턴
- 자바빈즈 패턴
- 불변성 문제
- 또한 완전히 생성된 객체라고 하더라도 외부적으로 세터 메소드를 노출하고 있으므로, 불변함을 보장할 수 없게된다. 즉, 자바빈즈 패턴을 사용하면 클래스를 불변으로 만들 수 없다.
- 불변성 문제
점층적 생성자 패턴의 안전성 + 자바빈즈 패턴의 가독성 ⇒ 빌더 패턴
빌더 패턴의 단점
빌더 패턴도 장점만 존재하지는 않다. 선택적 매개변수를 많이 받는 객체를 생성하기 위해서는 먼저 빌더 클래스부터 정의해야한다. 빌더의 생성비용이 크지는 않지만, 성능에 민감한 상황에서는 문제가 될 수 있다고 한다.
또한 매개변수가 4개보다 적다면, 점층적 생성자 패턴을 사용하는 것이 더 좋다고 한다. 빌더 패턴의 코드가 다소 장황하기 때문이다. 하지만, API 는 시간이 지날수록 많은 매개변수를 갖는 경향이 있다. 따라서 애초에 빌더 패턴으로 시작하는 편이 나을 때가 많다고 한다.
'이펙티브자바' 카테고리의 다른 글
[이펙티브 자바]아이템4 인스턴스화를 막기 위해 private 생성자 사용하기 (0) | 2023.07.13 |
---|---|
[이펙티브 자바]아이템3 private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2023.07.13 |
[이펙티브 자바]아이템1 생성자 대신 정적 팩터리 메소드 (0) | 2023.07.13 |