빌더 패턴
빌더 패턴은 생성 인자가 많을 시, 빌더 객체를 통해 구체적인 객체를 생성
자바 클래스 오버로팅 생성자에서 아래 같은 형식을 본 적이 있을 것이다.
public class Person{
private String name;
private int age;
private int height;
public Person(String name){
this.name = name;
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public Person(String name, int age, int height){
this.name = name;
this.age = age;
this.height = height;
}
}
위와 같은 방법은 원하는 신상 정보만 등록할 수 있다. 하지만 문제가 있다.
이를 위한 빌더 클래스를 아래와 같이 작성할 것이다.
public class PersonBuild{
private String name;
private int age;
private int height;
public PersonBuild name(String name){this.name = name; return this;}
public PersonBuild age(String age){this.age = age; return this;}
public PersonBuild height(String height){this.height = height; return this;}
public Person build(){
Person thisPerson = new Person(name,age,height);
return thisPerson
}
}
빌더 클래스가 완성된 후에 생성자를 부를 때 아래와 같이 작성할 수 있다.
PersonBuild personbuild = new Personbuild();
Pesron person = psersonbuild
.name("tatiana")
.age("26")
.height("165")
.build();
여기서 멈출 수 없다. Javascript로 빌더 패턴에 들어가자!
class Person {
constructor(build) {
if (build) {
this.id = build.id;
this.name = build.name;
this.age = build.age;
}
}
static get Build() {
class Build {
name(name) {
this.name = name;
return this;
}
age(age) {
this.age = age;
return this;
}
height(height) {
this.height = height;
return this;
}
build() {
return new Person(this);
}
}
return new Build();
}
}
아래와 같이 사용할 수 있다.
const personBuilder1 = person.build;
const person1 = personBuilder1.name("tatiana").age(26);
const personBuilder2 = person.build;
const person2 = personBuilder2.name("James").age(50);
아직 깔끔하지 않다.
여기서 어제 배운 객체 지향 패러다임을 본다면 클래스란 개념이다.
빌더 역시 객체가 아닌 클래스 개념이다.
때문에 빌더가 상위 클래스가 되서 빌더가 되는 클래스에게 상속한다면
getter & setter의 중복도 제거하고, 클린 코드도 가능하다.
위와 같은 방법은 어떻게 해야할까?
다음 시간에 알아보도록 하겠다.