상세 컨텐츠

본문 제목

생성패턴 중, 빌드패턴에 대하여..

소프트웨어공학

by amanda.hyon 2024. 7. 14. 17:51

본문

 

빌더 패턴(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))

 

관련글 더보기

댓글 영역