복잡한 객체를 **생성하는 방법을 정의
**하는 클래스와 **표현하는 방법을 정의
**하는 클래스를
별도로 분리하여 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴
객체를 생성할 때 필요한 값만 세팅되고 매개변수 사용한 생성자가 아니라 변수명을 명시하여 **생성하는 것
**이기
때문에 변수 순서가 바뀌거나 새로 추가될 때 유연하게 대처가 가능하고 매개변수가 많아도 가독성을 높일 수 있다
/* 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가 자동으로 만들어준다