점층적 생성자 패턴

생성자와 정적 팩터리는 매개변수가 많을 때 적절히 대응하기 어렵다.

public class User {
    private final int age;             // 필수
    private final int phoneNumber;     // 필수
    private final int weight;          // 선택
    private final int tall;            // 선택
    private final int birthday;        // 선택
}

점층적 생성자 패턴으로 생성을 했었다.

private User(int age, int phoneNumber) {
    this.age = age;
    this.phoneNumber = phoneNumber;
}

private User(int age, int phoneNumber, int weight) {
    **this(age, phoneNumber);**
    this.weight = weight;
}

private User(int age, int phoneNumber, int weight, int tall) {
    **this(age, phoneNumber);**
    this.weight = weight;
    this.tall = tall;
}

private User(int age, int phoneNumber, int weight, int tall, int birthday) {
    **this(age, phoneNumber);**
    this.weight = weight;
    this.tall = tall;
    this.birthday = birthday;
}
User user = new User(20, 99998888, 70, 180, 1225);

매개변수가 늘어날수록 코드를 작성하거나 읽기 어렵다.

자바빈즈 패턴

public class User {
    private int age = 1;
    private int phoneNumber = 11111111;
    private int weight;
    private int tall;
    private int birthday;

    public void setAge(final int age) { this.age = age; }
    public void setPhoneNumber(final int phoneNumber) { this.phoneNumber = phoneNumber; }
    public void setWeight(final int weight) { this.weight = weight; }
    public void setTall(final int tall) { this.tall = tall; }
    public void setBirthday(final int birthday) { this.birthday = birthday; }
}

User user = new User();
user.setAge(20);
user.setPhoneNumber(99999999);
user.setWeight(70);
user.setTall(180);
user.setBirthday(1225);

점층적 생성자 패턴의 단점이 보완되었다. 더 읽기 쉬운 코드가 되었다.

하지만 심각한 단점을 가지고 있다.