반응형
빌더패턴(Builder Pattern)
- 빌더 패턴은 생성패턴(Creational Pattern) 중 하나이다.
- 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴이다.
- 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현방법을 시스템과 분리해준다.
- 별도의 Builder 클래스를 생성해서 필수 값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 값을 입력받은 후에 build() 메서드를 통해 최종적으로 하나의 인스턴스를 리턴하는 방식이다.
장점
- 필요한 데이터만 설정할 수 있다.
- 유연성을 확보할 수 있다.
- 가독성을 높일 수 있다.
- 변경 가능성을 최소화할 수 있다.
코드
House.java
public class House {
private Long houseId;
private String address;
private String type;
private Long price;
private String phone;
public Long getHouseId() {
return houseId;
}
public String getAddress() {
return address;
}
public String getType() {
return type;
}
public Long getPrice() {
return price;
}
public String getPhone() {
return phone;
}
private House(HouseBuilder builder) {
this.houseId = builder.houseId;
this.address = builder.address;
this.type = builder.type;
this.price = builder.price;
this.phone = builder.phone;
}
public static class HouseBuilder{
private Long houseId;
private String address;
private String type;
private Long price;
private String phone;
// 필수값 생성자
public HouseBuilder(Long houseId, String address, String type) {
this.houseId = houseId;
this.address = address;
this.type = type;
}
public HouseBuilder price(Long price) {
this.price = price;
return this;
}
public HouseBuilder phone(String phone) {
this.phone = phone;
return this;
}
public House build() {
return new House(this);
}
}
}
HouseTest.java
@SpringBootTest
class HouseTest {
@Test
void HouseBuilderTest() {
String houseAddress = "서울특별시 관악구";
String houseType = "매매";
Long housePrice = 10000000L;
House house = new House.HouseBuilder(1L, houseAddress, houseType)
.price(housePrice)
.build();
assertThat(house.getAddress(), is(houseAddress));
assertThat(house.getType(), is(houseType));
assertThat(house.getPrice(), is(housePrice));
}
}
실무 사용 사례
- java에 StringBuilder
- java에 Stream API
- Spring Lombok
- Spring UriComponents
정리
- 인스턴스를 생성할 때 생성자만을 통해서 생성하면 칼럼이 변경될 때마다 많은 소스코드에 영향이 가는 고통스러운 상황이 발생할 것이다. 빌더 패턴을 이용해서 유연성을 확보할 수 있다.
참조
- https://readystory.tistory.com/121
728x90
반응형
'JAVA > Design Pettern' 카테고리의 다른 글
[Design Pattern] 프록시 패턴 (0) | 2022.03.22 |
---|---|
[Design Pattern] 추상 팩토리 패턴 (0) | 2022.03.19 |
[Design Pattern] 어댑터 패턴 (0) | 2022.03.16 |
[Design Pattern] 싱글톤 패턴 (0) | 2022.03.15 |
[Design Pattern] 팩토리 메소드 패턴 (0) | 2022.03.12 |