PYTHON · 디자인패턴
빌더 패턴
빌더 패턴으로 복잡한 객체를 단계별로 구성합니다. 메서드 체이닝으로 가독성을 높입니다.
디자인패턴고급builder빌더메서드 체이닝생성 패턴
핵심 설명
빌더 패턴으로 복잡한 객체를 단계별로 구성합니다. 메서드 체이닝으로 가독성을 높입니다.
Python code
from dataclasses import dataclass, field
@dataclass
class HttpRequest:
method: str = "GET"
url: str = ""
headers: dict = field(default_factory=dict)
params: dict = field(default_factory=dict)
body: str | None = None
timeout: int = 30
class RequestBuilder:
def __init__(self, url: str):
self._request = HttpRequest(url=url)
def method(self, method: str) -> "RequestBuilder":
self._request.method = method
return self
def header(self, key: str, value: str) -> "RequestBuilder":
self._request.headers[key] = value
return self
def param(self, key: str, value: str) -> "RequestBuilder":
self._request.params[key] = value
return self
def body(self, data: str) -> "RequestBuilder":
self._request.body = data
return self
def timeout(self, seconds: int) -> "RequestBuilder":
self._request.timeout = seconds
return self
def build(self) -> HttpRequest:
if not self._request.url:
raise ValueError("URL은 필수입니다")
return self._request
# 메서드 체이닝으로 가독성 높은 구성
request = (
RequestBuilder("https://api.example.com/users")
.method("POST")
.header("Content-Type", "application/json")
.header("Authorization", "Bearer token123")
.param("page", "1")
.body('{"name": "Alice"}')
.timeout(10)
.build()
)
print(f"{request.method} {request.url}")
print(f"헤더: {request.headers}")
print(f"본문: {request.body}")학습 팁
빌더의 각 메서드가 self를 반환하면 메서드 체이닝이 가능합니다.
주의할 점
build()에서 필수 필드 유효성 검사를 하지 않으면 불완전한 객체가 생성될 수 있습니다.
자주 묻는 질문
빌더 패턴란 무엇인가요?
빌더 패턴으로 복잡한 객체를 단계별로 구성합니다. 메서드 체이닝으로 가독성을 높입니다.
빌더 패턴 학습 시 주의할 점은 무엇인가요?
build() 에서 필수 필드 유효성 검사를 하지 않으면 불완전한 객체가 생성될 수 있습니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.