이펙티브 자바 2장 - 객체의 생성과 파괴
[아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라
정적 팩터리와 생성자의 동일한 제약
선택적 매개변수가 많을때 적절하게 대응하기 어려움.
대안책 1. 점층적 생성자 패턴 사용
점층적 생성자 패턴도 쓸 수 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어려울 수 있음.
대안책 2. 자바빈즈 패턴
자바빈즈 패턴에서는 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성이 무너짐.
클래스를 불변으로 만들 수 없으며, 스레드 안정성을 얻으려면 추가로 작업을 해줘야만 함.
대안책 3. 빌더 패턴
점층적 생성자 패턴의 안정성과 자바 빈즈 패턴의 가독성을 겸비한 빌더 패턴
메서드 호출이 흐르듯 연결된다는 뜻으로 플루언트 API 혹은 메서드 연쇄라고 함.
빌더 패턴은 계층적으로 설계된 클래스와 함께 쓰기 좋음.
빌더 패턴의 장점
유연하다
빌더 하나로 여러 객체를 순회하면서 만들 수 있고, 빌더에 넘기는 매개변수에 따라 다른 객체를 만들 수도 있다.
빌더 패턴의 단점
객체를 만들려면, 그에 앞서 빌더 패턴부터 만들어야 함.
빌더 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있음.
[핵심 정리]
생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 낫다.
빌더는 점층적 생성자보다는 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고, 자바빈즈보다 훨씬 안전하다.
'책 > 이펙티브 자바 3판' 카테고리의 다른 글
[아이템 7] 다 쓴 객체 참조를 해제하라. (0) | 2023.04.19 |
---|---|
[아이템 6] 불필요한 객체 생성을 피하라. (0) | 2023.04.18 |
[아이템 4] 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2023.04.18 |
[아이템 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라. (0) | 2023.04.18 |
[아이템 1] 생성자 대신에 정적 팩토리 메서드 패턴을 고려하라. (0) | 2023.04.18 |