728x90
반응형
Builder Pattern
- 프로퍼티 즉 변수가 많을 경우 명확하게 값을 넣어 생성하게 해준다.
- 왜 써야 할까? 만약 변수가 100개 200개 정도 된다면 실수없이 데이터를 넣을수 있을까?
- 빌더 패턴을 쓰면 명확하게 값을 넣을수 있고 값이 없는 경우 default 값을 줄수도 있겠다.
- 하지만 비용이 들기 때문에 변수가 최소 4개 이상일때 효과적이다.
Builder Pattern 예제
- 학생 클래스가 있다고 해보자 만약 변수가 100개 정도 된다면?
- 생성자에 값을 직접 넣거나 setter로 넣으면 복잡해지고 보기도 어렵다.
Student Class
package patterns.builder;
public class Student {
private String name;
private int age;
private int grade;
public Student(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "name:" + name + " age:" + age + " grade:" + grade;
}
}
StudentBuilder Class
이처럼 빌더를 따로 만들어서 명확하게 값을 넣어줄수 있다.
package patterns.builder;
public class StudentBuilder {
private Student student;
private StudentBuilder() {
student = new Student("",0,0);
}
public static StudentBuilder start() {
return new StudentBuilder();
}
public StudentBuilder setName(String name) {
student.setName(name);
return this;
}
public StudentBuilder setAge(int age) {
student.setAge(age);
return this;
}
public StudentBuilder setGrade(int grade) {
student.setGrade(grade);
return this;
}
public Student build() {
return student;
}
}
Main Class
- 빌더 적용전:
- 지금은 변수가 몇개 없어서 쉽지만 벌써 22 가 무슨 값인지 1 이 무슨 값인지 알아보기 힘들다. - 빌더 적용후:
- 명확해 졌다.
package patterns.builder;
public class Main {
public static void main(String[] args) {
// 빌더 적용전
Student student1 = new Student("name", 22,1);
// 빌더 적용후
Student student2;
student2 = StudentBuilder.start()
.setName("student1")
.setAge(12)
.setGrade(1)
.build();
System.out.println(student2.toString());
}
}
728x90
반응형
'Design pattern > GoF(인강편)' 카테고리의 다른 글
[Design Pattern] Bridge Pattern (0) | 2021.12.26 |
---|---|
[Design Pattern] Abstract Factory Pattern (0) | 2021.11.29 |
[Design Pattern] Prototype Pattern (0) | 2021.11.24 |
[Design Pattern] Singleton Pattern (0) | 2021.11.24 |
[Design Pattern] Factory Method Pattern (0) | 2021.11.24 |
댓글