빌더 패턴(Builder Pattern)은 객체 생성 디자인 패턴 중 하나로, 복잡한 객체의 생성을 단계별로 처리하여 생성 과정에서의 다양한 옵션을 지원하는 방법을 제공합니다. 이 패턴은 특히 객체의 생성자가 복잡하고 인자가 많을 때 유용합니다. 생성자의 인자가 많을 경우, 가독성 및 유지보수성을 높여주는 효과가 있습니다.
나는 최근 파이썬을 주력으로 사용하고 있기 때문에 자바와 파이썬을 비교하여 설명하고자 합니다.
자바와 파이썬 모두 빌더 패턴을 통해 객체 생성 시의 복잡성을 줄이고 가독성을 높일 수 있습니다. 자바에서는 빌더 패턴이 일반적으로 사용되며, 파이썬에서는 선택적으로 사용될 수 있습니다.
다음은 자바에서는 빌더 패턴을 사용하여 복잡한 객체를 생성할 때 메서드 체이닝을 통해 가독성을 높이고, 객체의 불변성을 보장할 수 있는 코드이다.
public class User {
private final String firstName;
private final String lastName;
private final int age;
private final String email;
private User(Builder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.email = builder.email;
}
public static class Builder {
private String firstName;
private String lastName;
private int age;
private String email;
public Builder firstName(String firstName) {
this.firstName = firstName;
return this;
}
public Builder lastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public User build() {
return new User(this);
}
}
}
// 사용 예시
public class Main {
public static void main(String[] args) {
User user = new User.Builder()
.firstName("John")
.lastName("Doe")
.age(30)
.email("john.doe@example.com")
.build();
System.out.println(user);
}
}
파이썬에서도 유사한 방법을 사용할 수 있지만, 파이썬의 유연한 인스턴스 변수 할당과 기본 인자값을 활용하여 더 간단하게 처리할 수 있습니다.
class User:
def __init__(self, first_name=None, last_name=None, age=None, email=None):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.email = email
class Builder:
def __init__(self):
self._first_name = None
self._last_name = None
self._age = None
self._email = None
def first_name(self, first_name):
self._first_name = first_name
return self
def last_name(self, last_name):
self._last_name = last_name
return self
def age(self, age):
self._age = age
return self
def email(self, email):
self._email = email
return self
def build(self):
return User(
first_name=self._first_name,
last_name=self._last_name,
age=self._age,
email=self._email
)
# 사용 예시
builder = User.Builder()
user = builder.first_name("John").last_name("Doe").age(30).email("john.doe@example.com").build()
print(vars(user))
구조패턴 중, 어댑터(Adapter)패턴에 대하여... (0) | 2024.07.14 |
---|---|
생성 패턴 중 '싱글톤' 패턴에 대하여.. (0) | 2024.07.14 |
댓글 영역