-
[Design Pattern] 빌더 패턴디자인패턴 2021. 12. 19. 17:31
1. 빌더패턴 란?
- 빌더 패턴은 객체 생성과정을 그 개체의 클래스로부터 분리시키는 하나의 방법이다.
- 객체의 부분부분을 만들어 나가다가 준비되면 객체를 생성해나가는 방식이다.
2. 빌더 패턴의 장점(= 생성자의 문제 해결)
- 생성자가 여러개의 인자를 받을 때 그 순서의 오류는 막지 못한다.(type이 같다면 막을 수 가 없음)
- 필요 없는 인자에 대해서 null 값을 넘겨 주거나 여러개의 생성자를 만들어야한다.
- 유지보수에 유리하다
- 기존의 코드에 생성자 인자 값을 추가해야할때 기존의 코드를 고치지 않고 builder 에 메서드를 추가하여 제작할 수 있다.(Open - Close 원칙 준수)
2-1. 빌더 패턴의 단점
빌더패턴으로 인핸 생성에 있어 자유도가 생겼습니다.
실질적으로는 반드시 넣어서 제작해야하는 파라미터임에도 이 부분을 잊고 넣지 않더라도 생성이 가능합니다.
즉 무결성을 해칠 수 있게 되는 것입니다.
예를 들어 아래 예제에서처럼 빌더를 제작하고 emplyee 를 생성한다면 employee의 맴버 변수 startingYear는 0을 갖게되어 의도치 않은 실수를 발생시킬 수 있습니다.
3. 예제
- 생성자는 빌더만을 인자로 받는다.
- 빌더의 함수들은 빌더 자신을 반환하여 플루언트 인터페이스로 제작한다.
//main Employee employee = new EmployeeBuilder(11) .setAge(10) .setLastName("kim") .setFirstName("john") .build(); System.out.println(employee.getFirstName()); // john
//Emplyee public class Employee { int id; int age; int startingYear; String firstName; String lastName; public Employee(EmployeeBuilder employeeBuilder) { this.id = employeeBuilder.id; this.age = employeeBuilder.age; this.startingYear = employeeBuilder.startingYear; this.firstName = employeeBuilder.firstName; this.lastName = employeeBuilder.lastName; } }
//EmplyeeBuilder public class EmployeeBuilder { int id; int age; int startingYear; String firstName; String lastName; public EmployeeBuilder(int id) { this.id = id; } public Employee build() { return new Employee(this); } public EmployeeBuilder setAge(int age) { this.age = age; return this; } public EmployeeBuilder setStartingYear(int startingYear) { this.startingYear = startingYear; return this; } public EmployeeBuilder setFirstName(String firstName) { this.firstName = firstName; return this; } public EmployeeBuilder setLastName(String lastName) { this.lastName = lastName; return this; } }
'디자인패턴' 카테고리의 다른 글
[Design Pattern] 프록시(Proxy) 패턴 (feat. 즉시로딩 vs 지연로딩) (0) 2022.02.16 [Design Pattern] 싱글턴 (feat. static) (0) 2021.12.14 [Design Pattern] 래퍼 패턴 (0) 2021.11.22 [Design Pattern] 팩토리 매서드 패턴 (0) 2021.11.19