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

신명철·2022년 2월 9일
0

Effective Java

목록 보기
2/80

빌더의 필요성

점층적 생성자 패턴으로 인스턴스를 만들려면 사용자가 사용시 헷갈릴 뿐만 아니라, 매개변수가 점점 많아질수록 클라이언트 코드를 읽거나 사용하기가 점점 더 어려워진다.

Setter를 이용한 Java Beans 패턴으로 대체할 수 있겠지만, 객체 완성 전까지 일관성이 유지되지 못하고 객체 생성을 위해 메서드를 여러 개 호출해야 한다는 문제점이 있다.

빌더 패턴

필수 매개변수 만으로 생성자를 호출해 객체를 얻을 수 있다.

public class A {
	private final int cost;
    private final int amount;

	public static class Builder {
    	private int cost = 0;
    	private int amount = 0;
		
        public Builder() {
        }
        
        public Builder cost(int cost){
        	this.cost = cost;
            return this;
        }
        public Builder amount(int amount){
        	this.amount = amount;
            return this;
        }
        public A build() {
        	return new A(this);
        }
    }
	
	private A(Builder builder) {
		this.cost = builder.cost;
		this.amount = builder.amount;
	}
}
A a = new A.Builder()
			.cost(10)
			.amount(10)
			.build();
  • Builder 는 자신을 return 하며 연쇄적인 메서드 호출이 가능하게 한다.
  • 빌더 패턴은 점층적 생성자보다 많은 코드를 요구하기 때문에 인자가 충분히 많은 상황에서 사용하는 것이 올바르다.
  • 즉, 인자가 많은 생성자나 정적 팩터리 메서드가 필요한 클래스를 할 때, 특히 대부분의 인자가 선택적인(optional) 상황에서 유용하다.
profile
내 머릿속 지우개

0개의 댓글