클래스에 인스턴스를 만들기 위해서는 매개변수를 입력 받아 클래스를 생성해야한다 하지만 점점 많은 매개변수를 받게 될 경우 하나부터 N개의 매개변수에 대한 생성자를 각각 생성해주어야 하고 필요한 생성자를 골라서 생성해야한다.
이렇게 되면 코드상으로도 읽기 어려우며 코드의 양도 많아지게 된다.
점층적 생성자 패턴
- 위와 같은 생성자 생성 패턴을 점층적 생성자 패턴 이라고 하는데 점층적 생성자 패턴 사용 시 타입이 같은 매개변수가 연달아 있으면 매개변수의 순서를 잘못 설정하여 지정해줘도 컴파일러는 알아차리지 못하고 런타임 단계에서 이상한 동작을 하게되어 매개변수가 많을 경우 안좋은 점 이 있다.
자바빈즈 패턴 (JavaBeans Pattern)
- 선택 매개변수가 많을 떄 활용하는 패턴으로 Setter를 구현하여 인스턴스를 만드는 패턴이다
- 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성이
무너진 상태에 놓이게 된다.
- 자바빈즈 패턴에서는 클래스를 분변으로 만들 수 없으며, 스레드의 안정성을 얻기 위해선 프로그래머가
추가 작업을 진행해야 한다.
빌더 패턴 (Builder Pattern) [Item 30]
- 클라이언트는 필요한 객체를 직접 만드는 대신, 필수 매개변수만으로 생성자를 호출해 빌더 객체를 얻는다
- 빌더의 세터 메서드들은 빌더 자신을 반환하기 때문에 연쇄적으로 호출 된다 (fluent API or method Chaining)
- 잘못된 매개변수를 가장 먼저 발견하려면 빌더의 생성자와 메서드에서 validation 실행, 이상 시 예외 발생
- 계층적으로 설계된 클래스와 함께 쓰기 좋다
- 가변인수 매개변수를 여러 개 사용할 수 있다.
- 빌더 하나로 여러 객체를 순회하면서 만들 수 있고, 빌더에 넘기는 매개변수에 따라 다른 객체를 만들 수도 있다.
EX) BuilderFactory bf = new BuilderFactory.Builder(200,100) // 필수 매개변수
.name("lee").age(30).build(); // 선택적 매개변수 설정
⁕ 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 게 낫다.
'IT 관련 책 정리 및 후기 > Java Effective E3' 카테고리의 다른 글
[ITEM 6] 불필요한 객체 생성을 피해라 (0) | 2022.05.19 |
---|---|
[ITEM 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2022.05.17 |
[ITEM 4] 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2022.05.17 |
[Item3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2022.05.17 |
[Item1] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.05.17 |