
소프트웨어 개발
Builder Pattern빌더 패턴
빌더 패턴(Builder Pattern)은 복잡한 객체를 단계적으로 구축하는 생성 패턴이다. 생성자에 매개변수가 많을 때(텔레스코핑 생성자 안티패턴) 가독성과 유연성을 높인다.
Python 구현
python
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Pizza:
size: str
crust: str
sauce: str
toppings: list[str] = field(default_factory=list)
extra_cheese: bool = False
gluten_free: bool = False
class PizzaBuilder:
def __init__(self):
self._size = "medium"
self._crust = "thin"
self._sauce = "tomato"
self._toppings = []
self._extra_cheese = False
self._gluten_free = False
def size(self, size: str) -> 'PizzaBuilder':
self._size = size
return self
def crust(self, crust: str) -> 'PizzaBuilder':
self._crust = crust
return self
def sauce(self, sauce: str) -> 'PizzaBuilder':
self._sauce = sauce
return self
def topping(self, topping: str) -> 'PizzaBuilder':
self._toppings.append(topping)
return self
def extra_cheese(self) -> 'PizzaBuilder':
self._extra_cheese = True
return self
def gluten_free(self) -> 'PizzaBuilder':
self._gluten_free = True
return self
def build(self) -> Pizza:
return Pizza(
self._size, self._crust, self._sauce,
self._toppings, self._extra_cheese, self._gluten_free
)
# 메서드 체이닝으로 직관적 생성
pizza = (PizzaBuilder()
.size("large")
.crust("thick")
.sauce("bbq")
.topping("pepperoni")
.topping("mushroom")
.extra_cheese()
.build())Java 빌더 (Lombok)
java
@Builder
@Data
public class HttpRequest {
private String url;
private String method;
private Map<String, String> headers;
private String body;
private int timeout;
}
// 사용
HttpRequest req = HttpRequest.builder()
.url("https://api.example.com/data")
.method("POST")
.timeout(5000)
.build();