빌더 패턴

복잡한 객체를 **생성하는 방법을 정의**하는 클래스와 **표현하는 방법을 정의**하는 클래스를

별도로 분리하여 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴

왜 ?

객체를 생성할 때 필요한 값만 세팅되고 매개변수 사용한 생성자가 아니라 변수명을 명시하여 **생성하는 것**이기

때문에 변수 순서가 바뀌거나 새로 추가될 때 유연하게 대처가 가능하고 매개변수가 많아도 가독성을 높일 수 있다


장점

  1. 만들기 복잡한 객체를 순차적으로 만들 수 있는 방법을 제공
  2. 복잡한 생성자를 간단하게 만들어줌
  3. 안정성을 보장

단점

  1. 인스턴스를 만드는 구조가 복잡해진다

예시 코드

/* Concrete Builder */
package builder;

public class PoohBuilder extends ToyBuilder {
    @Override
    public ToyBuilder buildName() {
        toy.setName("Pooh");
        return this;
    }

    @Override
    public ToyBuilder buildHair() {
        toy.setHair("Yellow");
        return this;
    }

    @Override
    public ToyBuilder buildClothes() {
        toy.setClothes("Red short sleeved T-shirt");
        return this;
    }

    @Override
    public ToyBuilder buildPants() {
        return this;
    }

    @Override
    public ToyBuilder buildShoes() {
        return this;
    }
}

Lombok 라이브러리를 사용한다면 @Builder가 자동으로 만들어준다