// Basket은 불변의 클래스
public class Basket{

  private final String name;
  private final int numbers;

  public static class Builder{
    // 필수
    private final String name;

    // 선택
    private int numbers;

    // 필수 생성자
    public Builder(String name){
      this.name = name;
    }

    // 각각의 속성 설정
    public Builder numbers(int val){
      this.numbers = val;
      return this;
    }

    // 완료
    public Basket build(){
      return new Basket(this);
    }
  }

  private Basket(Builder builder){
    this.name = builder.name;
    this.numbers = builder.numbers;
  }
}