Java Beans나 점층적 생성자 방식은 장단점이 있었다. 만약 immutable한 인스턴스를 생성하면서도 메서드명에 명확한 의미를 주려면 Builder 패턴을 사용하면 된다.

Builder 패턴을 적용한 호출 코드는 다음과 같다.

User user = User.builder(5L)
		.name("하하")
		.address("대구광역시 동구 용계동")
		.highSchool("청구고등학교")
		.age(30)
		.build();
System.out.println(user);
// User [id=5, name=하하, highSchool=청구고등학교, address=대구광역시 동구 용계동, age=30]

빌더 패턴 진행 과정


롬복을 통하면 빌더 패턴을 간단히 만들어주지만 직접 구현해보는 코드를 요약하면 다음과 같다

  1. 생성하려는 클래스의 NestedClass로 Builder를 생성한다. 이 클래스는 상위 클래스에서 설정하고 싶은 필드들을 갖는다. (보통 전부)
  2. 상위 클래스는 빌더를 리턴해주는 static method를 제공한다
  3. 빌더 클래스는 본인을 return하고 값을 설정하는 메서드를 가진다
  4. 상위 클래스는 기본 생성자를 private로 숨기되, 빌더를 전달받아 자신의 모든 필드를 초기화하는 생성자를 갖는다
  5. 빌더 클래스는 3번의 생성자를 사용해서 상위 클래스를 return하는 메서드를 갖는다

소스 코드


  1. 생성하려는 클래스의 NestedClass로 Builder를 생성한다. 이 클래스는 상위 클래스에서 설정하고 싶은 필드들을 갖는다. (보통 전부)
class User {
	
	private Long id;
	private String name;
	private String highSchool;
	private String address;
	private int age;

]