[디자인 패턴] 빌더 패턴
생성자에 전달할 요소가 너무 많으면 가독성도 떨어지고 좀 그럴 수가 있다.
아래 코드는 사람의 정보를 표현하는 클래스를 구현한 것이다.

구현할 때는 간단해보이는데
이걸 사용하자면 좀...

많이 조잡해보인다.
생성문도 길어져서 한줄에 다 보이지도 않고, 인자가 너무 많아서 뭐가 뭔지도 구분하기가 힘들다.
이럴 때 사용하곤 하는 패턴이 빌더 패턴이다.
빌더 패턴은 필요한 필드만 생성자에서 초기화하고 나머지는 별도의 메서드에 떠넘겨서 사용을 보다 편리하게 만드는 생성 패턴이다.
빌더 패턴에선
1.해당 클래스의 자체 생성자를 전부 private으로 만들어서 인위적인 생성을 막는다. 이 클래스는 편의상 T라고 부르겠다.
2.그리고 T의 서브클래스를 만들고 객체의 생성을 거기다 위임한다. 이건 빌더라고 부르겠다.
3.빌더의 생성자엔 T에게 무조건 필요한 요소만 받도록 해둔다.
4.그리고 T에게 있어도 되고 없어도 되는, 그런 부가적인 요소들은, 빌더의 일반 메서드로 받게 해둔다.
5.빌더의 이러한 입력용 메서드들은 전부 요소 세팅 후 빌더 객체 자기 자신을 반환한다.
6.때문에 빌더의 요소 입력은 체이닝 형식으로 이어질 수 있다.
new T.Builder(10,20)
.setBoom(3.14)
.setHot(true);
//10,20로 생성 후, 특정 요소에 각각 3.14와 true 세팅
7.빌더의 생성작업이 완료되면 빌더의 빌드 메서드를 사용해서 완전한 T 객체를 내뱉는다.
위의 Person 클래스에 빌더 패턴을 적용하면 이렇게 바꿀 수 있다.

Person의 생성자는 날려버리고, Builder 클래스를 중첩.
생성은 빌더에서 담당한다.

코드는 좀 길어지지만

이렇게 사용이 가능하다.
인터페이스가 훨씬 깔끔해진다.
다른 객체들을 확장할 가능성이 있다면, 빌더에 인터페이스를 두는 것도 좋다.
예제
https://github.com/myyrakle/DesignPatterns/tree/master/Builder
참조
헤드퍼스트 디자인 패턴
https://aroundck.tistory.com/m/152