Java에서 Class 객체를 생성하면, Class와 이름이 같고 값을 반환하지 않는 생성자가 가장 먼저 실행됩니다. 이때 객체의 멤버 변수를 매개변수로 받아 객체를 만들 수 있습니다.
public static class Person {
int age;
public Person(int age) {
this.age = age;
}
}
public static void main(string[] args) {
Person p = new Person(2);
}
이렇게 사용하면 됩니다.
public static class Person {
int age;
String name;
String addr;
String job;
public Person(int age, String name, String addr, String job) {
this.age = age;
this.name = name;
this.addr = addr;
this.job = job;
}
}
public static void main(string[] args) {
Person p = new Person(2, "j kim", "seoul..", "dev");
}
이렇게 늘어난 매개변수의 개수를 아주 정확한 위치에 넣어줘야 합니다.
그래서 사용하는 것이 Builder Pattern입니다!
빌더 패턴은 생성자에 들어가는 매개변수를 모아놓고 한번에 사용합니다. 즉, 매개 변수의 순서에 상관 없이 사용할 수 있는 장점이 있습니다. 또 불필요한 생성자를 만들지 않고 객체를 생성할 수 있습니다.
static class Person {
int age;
String name;
String addr;
String job;
public Person(int age, String name, String addr, String job) {
this.age = age;
this.name = name;
this.addr = addr;
this.job = job;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", addr='" + addr + '\'' +
", job='" + job + '\'' +
'}';
}
}
static class PersonBuilder {
private int age;
private String name;
private String job;
private String addr;
public int getAge() {
return age;
}
public PersonBuilder setAge(int age) {
this.age = age;
return this;
}
public String getName() {
return name;
}
public PersonBuilder setName(String name) {
this.name = name;
return this;
}
public String getJob() {
return job;
}
public PersonBuilder setJob(String job) {
this.job = job;
return this;
}
public String getAddr() {
return addr;
}
public PersonBuilder setAddr(String addr) {
this.addr = addr;
return this;
}
public Person build() {
Person person = new Person(age, name, addr, job);
return person;
}
}
마지막 build() 메소드로 객체를 반환합니다.
getter는 없어도 됩니다.
public static void main(String[] args) {
PersonBuilder builder = new PersonBuilder();
Person p = builder
.setAddr("Seoul")
.setAge(3)
.setJob("Dev")
.setName("j kim")
.build();
System.out.println(p);
}
좀 더 명확하고, 이해하기 쉬워집니다.