티스토리 뷰

[Effective Java 3/E] 생성자에 매개변수가 많다면 빌더를 고려하라

Effective Java 3/E
  • 선택적 매개변수가 많을 때에는 점층적 생성자 패턴을 쓰기 보다는 빌더(Builder)의 사용을 고려하라.
  • 그 외에 점층적 생성자 패턴, 자바빈즈 패턴 등이 있다.
  • 점층적 생성자 패턴의 경우 매개변수가 많아지면 코드 작성이나 읽기에 어렵다.

점층적 생성자 패턴 (telescoping constructor pattern)
생성자에 매개변수에 조합에 따라 매개변수가 1개, 2개, 3개.. 점층적으로 생성자를 모두 선언하는 방식

자바빈즈 패턴 (JavaBeans pattern)
매개변수가 없는 생성자로 객체 생성 후, Setter로 매개변수 값을 설정하는 방식
  • 하지만 자바 빈즈 패턴의 경우 객체가 완전히 생성되기 전까지 일관성이 무너진 상태에 놓이기 때문에 위험하다.


빌더 패턴 (Builder pattern)

객체를 직접 만드는 대신, 필수 매개변수만으로 생성자를 호출해 빌더 객체를 얻고, 그 다음 일종의 setter 메서드들로 원하는 매개 변수를 설정하는 방식

  • 빌더의 세터 메서드들은 빌더 자신을 반환하기 때문에 연쇄적으로 호출할 수 있다.
  • 이러한 연쇄적 호출을 일반적으로 fluent API 혹은 method chaining 이라고 한다. (String.replace 가 String을 리턴하는것과 유사)
  • 하지만, 코드가 장황해지므로 매개변수가 4개 이상은 되어야 효과적이다. (lombok을 사용하면 편하다.)
  • 빌더 생성 비용이 크진 않으나 성능에 민감한 경우 문제가 될 수 있다.


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday