빌더 패턴 (Builder Pattern) 은 객체를 생성하는 과정을 단순화하고, 유연성을 높여주는 디자인 패턴입니다. 이 패턴은 객체를 생성하는 과정을 단계별로 나누어 처리하며, 이 단계들을 조합하여 객체를 생성합니다. 빌더 패턴은 생성자의 매개변수가 많아지거나 객체 생성 과정이 복잡해지는 경우 유용하게 사용됩니다.
1. 예제 코드
class User:
def __init__(self):
self.username = None
self.password = None
self.email = None
self.first_name = None
self.last_name = None
def __str__(self):
return f"username: {self.username}, password: {self.password}, email: {self.email}, first_name: {self.first_name}, last_name: {self.last_name}"
위 코드에서는 유저 정보를 담는 User 클래스를 정의하였습니다. 빌더 패턴을 적용하기 위해, User 객체를 생성하는 과정을 단계별로 처리하는 빌더 클래스를 구현합니다.
class UserBuilder:
def __init__(self):
self.user = User()
def set_username(self, username):
self.user.username = username
return self
def set_password(self, password):
self.user.password = password
return self
def set_email(self, email):
self.user.email = email
return self
def set_first_name(self, first_name):
self.user.first_name = first_name
return self
def set_last_name(self, last_name):
self.user.last_name = last_name
return self
def build(self):
return self.user
위 코드에서는 UserBuilder 클래스를 정의하였습니다. UserBuilder 클래스는 User 객체를 생성하기 위해, User 클래스의 인스턴스를 생성하고, 이 인스턴스의 속성값을 단계별로 설정하는 메서드를 정의하였습니다. 마지막으로 build() 메서드를 호출하여, 최종적으로 생성된 User 객체를 반환합니다.
다음은 빌더 패턴을 사용하여 User 객체를 생성하는 예제 코드입니다.
user = UserBuilder() \
.set_username('john') \
.set_password('1234') \
.set_email('john@example.com') \
.set_first_name('John') \
.set_last_name('Doe') \
.build()
print(user) # username: john, password: 1234, email: john@example
위 코드에서는 UserBuilder 클래스를 사용하여, User 객체를 생성하였습니다. UserBuilder 인스턴스를 생성한 뒤, 단계별로 속성값을 설정하고, 마지막으로 build() 메서드를 호출하여 User 객체를 생성합니다. 이렇게 생성된 User 객체는 print() 함수를 사용하여 출력할 수 있습니다.
2. 장점
객체 생성 과정을 유연하게 처리할 수 있습니다. 객체 생성 과정이 복잡한 경우, 단계별로 처리하는 빌더 패턴을 사용하여 객체를 생성할 수 있습니다. 이렇게 하면 객체 생성 과정을 유연하게 처리할 수 있습니다.
객체 생성 과정을 단순화할 수 있습니다. 객체 생성 과정을 단계별로 처리하면서, 객체 생성 과정을 단순화할 수 있습니다. 이렇게 하면 코드의 가독성을 높일 수 있습니다.
객체 생성 시 유효성 검사를 수행할 수 있습니다. 빌더 패턴을 사용하면, 객체 생성 과정에서 유효성 검사를 수행할 수 있습니다. 예를 들어, 필수 속성이 누락되었는지, 속성값의 형식이 올바른지 등의 검사를 수행할 수 있습니다.
객체 생성 시 불변성을 보장할 수 있습니다. 빌더 패턴을 사용하면, 객체 생성 과정에서 불변성을 보장할 수 있습니다. 즉, 생성된 객체의 속성값을 변경할 수 없습니다. 이는 객체지향 프로그래밍의 핵심 원칙 중 하나인 "불변성 원칙"을 따르는 것입니다.
3. 단점
코드량이 늘어날 수 있습니다. 빌더 클래스를 따로 구현해야 하기 때문에, 코드량이 늘어날 수 있습니다.
객체 생성 시간이 더 오래 걸릴 수 있습니다. 객체 생성 과정이 단계별로 처리되기 때문에, 객체 생성 시간이 더 오래 걸릴 수 있습니다. 그러나 이는 일반적으로 미미한 차이일 수 있습니다.
'설계' 카테고리의 다른 글
[디자인 패턴] 어댑터 패턴 (Adapter Pattern) - python 예제 코드 (0) | 2023.03.07 |
---|---|
[디자인 패턴] 싱글턴 패턴 (Singleton Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 프로토타입 패턴 (Prototype Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 추상 팩토리 패턴 (Abstract Factory Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 팩토리 메서드 패턴 (Factory Method Pattern) - python 예제 코드 (0) | 2023.03.06 |