빌더 패턴이란 복잡한 객체를 생성하는 방법 중 하나로, 객체의 생성 코드와 객체의 사용코드를 분리하여 코드의 가독성과 유지 보수성을 향상시키는 패턴입니다.
public class Person {
private String name;
private Integer age;
private String favoriteColor;
private String favoriteAnimal;
private Integer favoriteNumber;
public Person(String name, Integer age, String favoriteColor, String favoriteAnimal, Integer favoriteNumber){
this.name = name;
this.age = age;
this.favoriteColor = favoriteColor;
this.favoriteAnimal = favoriteAnimal;
this.favoriteNumber = favoriteNumber;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public String getFavoriteColor() {
return favoriteColor;
}
public String getFavoriteAnimal() {
return favoriteAnimal;
}
public Integer getFavoriteNumber() {
return favoriteNumber;
}
public String getPerson(){
String personInfo = String.format("name:%s, age:%d, favoriteColor:%s, favoriteAnimal:%s, favoriteNumber:%d"
, name, age, favoriteColor, favoriteAnimal, favoriteNumber);
return personInfo;
}
}
위와 같이 한 사람의 프로필을 담고있는 person클래스를 만들었다.
생성자를 통해 모든 매개변수를 받도록 하고있는데, 저들 중 좋아하는 색상을 넣고 싶지 않다면 어떻게 해야할까?
Person person = new Person("홍길동", 20, null, "cat", 7);
이렇게 해서 하나의 케이스에 대해서는 처리를 했지만 하지만 여기에 새로운 유형의 정보가 들어온다면 어떻게 될까
예를 들자면 이름만 있다거나 이름과 좋아하는 동물만 있다거나 하면서요. 그럼 그때마다 새로운 생성자를 만들어 줘야 할까?
// 이름이 들어가야할 곳에 좋아하는 동물이 들어감.
// 반대로 좋아하는 동물이 들어가야 할 곳에 사람 이름이 들어감.
new Person("cat", 20, "JDM", null, null);
// @Data 혹은 @Getter, @Setter 등등
@Builder //LomBok 라이브러리 사용
@AllArgsConstructor // 모든 인자를 가진 생성자 생성
@NoArgsConstructor // 인자가 없는 생성자 생성
public class Person {
private String name;
private int age;
private String favoriteColor;
private String favoriteAnimal;
private Integer favoriteNumber;
}
Person person = Person.Builder()
.name("홍길동")
.age(20)
.favoriteColor("빨강")
.favoriteAnimal("고양이")
.favoriteNumber(7)
.build();
간단하게 디자인패턴 중 Builder 패턴이 왜 필요한지를 알아보고 사용해 보았다!