프로그래밍 공부
카테고리
작성일
2023. 5. 10. 23:26
작성자
WDmil
728x90

빌더패턴은 객체를 생성하는 과정을 캡슐화 하고, 객체 생성 과정의 다양한 단계에서 서로 다른 구현을 지원하는 디자인 패턴이다.

 

빌더패턴은 복잡한 객체를 생성하는 과정을 단순화 하고 유연성을 높여 객체를 생성하는 과정을 다양한 방법으로 구성할 수 있도록 한다.

 

이러한 빌더 패턴을 사용하는 이유는, 객체 생성 과정이 복잡해진다면 코드가 난잡해지기 때문에, 이러한 객체 생성과정을 더 간소화 하기 위해서 만든다.

 

예를들어, 객체 생성과정이 복잡할 때, 생성자를 사용하면 생성자의 매개변수가 많아지게 되어 필요없는 함수의 호출이 많아질 수 있고, 이를 관리하기도 어렵다.

 

또한, 생성자 오버로딩을 사용하여 매개변수 수를 줄이려고 하면 다양한 객체 생성방식을 적용하기 어려워진다.

 

이러한 문제점을 해결하기 위해 빌더 패턴을 사용한다.

 

빌더패턴의 장점은 다음과 같다.

  • 복잡한 객체를 생성하는 과정을 단순화 한다.
  • 객체 생성 과정의 다양한 구현을 지원한다.
  • 객체 생성 과정에서 필요한 매개변수를 강제한다.
  • 객체 생성 과정에서 생길 수 있는 오류를 줄일 수 있다.

빌더패턴의 단점은 다음과 같다.

  • 객체 생성을 위한 별도의 빌더 클래스가 필요하다.
  • 객체 생성 과정을 단계별로 분리하기 때문에, 일부 구성 요소의 구현이 불가능할 수 있다.
#include <iostream>
#include <string>

class Person
{
public:
    std::string name;
    int age;
    std::string address;
    std::string phone;

    class Builder; // 전방 선언
};

class Person::Builder // 클래스 외부에 Builder 클래스 선언
{
private:
    Person person;

public:
    Builder() {}

    Builder& set_name(std::string name)
    {
        person.name = name;
        return *this;
    }

    Builder& set_age(int age)
    {
        person.age = age;
        return *this;
    }

    Builder& set_address(std::string address)
    {
        person.address = address;
        return *this;
    }

    Builder& set_phone(std::string phone)
    {
        person.phone = phone;
        return *this;
    }

    Person build()
    {
        return person;
    }
};

int main()
{
    Person::Builder builder;
    Person person = builder
        .set_name("Alice")
        .set_age(30)
        .set_address("123 Main St.")
        .set_phone("555-1234")
        .build();

    std::cout << "Name: " << person.name << std::endl;
}

위 코드는 빌더패턴을 사용하여 내용을 초기화 해주는 것 이다.

 

이는, 내부 클래스를 따로 선언하여, 하나의 클래스 내부의 변수를 수정해주는 방법을 사용한다.

 

즉, 변수는 외부클래스에 선언 한 뒤 내부클래스 에서 그 변수를 초기화해주는 것 이다.

 

이러한 방법으로 더 간단하고 직관적으로 객체를 초기화해줄 수 있고 수정또한 편하다는 장점이 있다.

728x90

'디자인 패턴' 카테고리의 다른 글

Obserever 옵저버 패턴  (0) 2023.11.14
싱글톤 패턴(Singleton)  (0) 2023.10.10
추상 팩토리 패턴( Abstract Factory Pattern )  (0) 2023.05.05