지금을 사는 사람

빌더 패턴 (Builder Pattern) 본문

CS/디자인패턴

빌더 패턴 (Builder Pattern)

지금회 2023. 12. 15. 10:03
728x90

 

소개:

객체 생성에는 여러 매개변수가 필요한 경우가 종종 있습니다. 이런 복잡한 객체 생성을 다루기 위한 디자인 패턴 중 하나인 "빌더 패턴"은 객체를 생성하고 초기화하는 과정을 분리하여 코드를 간결하고 유연하게 만드는 효과적인 방법을 제공합니다. 이 블로그에서는 빌더 패턴에 대해 자세히 알아보겠습니다.


1. 객체 생성의 어려움

객체가 많은 속성을 가지고 있거나 특정 조건에 따라 다양한 초기화가 필요한 경우, 생성자의 매개변수가 많아지고 코드의 가독성이 떨어질 수 있습니다. 또한, 여러 선택적 매개변수가 있는 경우 생성자의 오버로딩이 불가피하게 발생할 수 있습니다.

// 매개변수가 많은 생성자
Person person = new Person("John", 25, "Male", "Engineer", "USA", ...);

2. 빌더 패턴의 도입

빌더 패턴은 이런 복잡한 객체 생성을 해결하기 위해 "빌더" 클래스를 도입하여 객체의 생성과 초기화를 분리합니다. 각 속성에 대한 설정 메서드를 제공하고, 마지막에 build() 메서드로 실제 객체를 생성합니다.

Person person = new PersonBuilder()
    .setName("John")
    .setAge(25)
    .setGender("Male")
    .setOccupation("Engineer")
    .setCountry("USA")
    .build();

3. 빌더 패턴의 이점

  • 가독성 향상:
    • 필요한 속성만 설정 가능하므로 코드의 가독성이 향상됩니다.
  • 유연성 제공:
    • 빌더를 사용하면 객체 생성 시 다양한 옵션을 선택할 수 있어 유연성이 높아집니다.
  • 인스턴스 불변성 유지:
    • 빌더를 통해 객체를 생성하면 객체의 불변성을 유지할 수 있습니다.
  • 디폴트 값 제공:
    • 빌더에서 일부 속성에 대해 디폴트 값을 지정할 수 있습니다.

4. 구현 단계

빌더 패턴을 사용하기 위해서는 다음과 같은 단계를 따릅니다.

  • 1단계: 빌더 클래스 생성
public class PersonBuilder {
    private String name;
    private int age;
    private String gender;
    private String occupation;
    private String country;

    // 설정 메서드들...

    public Person build() {
        return new Person(this);
    }
}
  • 2단계: 빌더 메서드 구현
public class PersonBuilder {
    //...

    public PersonBuilder setName(String name) {
        this.name = name;
        return this;
    }

    public PersonBuilder setAge(int age) {
        this.age = age;
        return this;
    }

    // 나머지 설정 메서드들...

    //...
}
  • 3단계: 빌더를 사용해 객체 생성
Person person = new PersonBuilder()
    .setName("John")
    .setAge(25)
    .setGender("Male")
    .setOccupation("Engineer")
    .setCountry("USA")
    .build();

5. 마무리

빌더 패턴은 객체 생성에 필요한 복잡성과 유연성을 제공하는 강력한 디자인 패턴입니다. 가독성이 향상되고 객체의 초기화에 관련된 코드가 분리되므로 유지보수성과 확장성이 향상됩니다. 특히, 많은 선택적인 매개변수가 있는 경우나 객체의 속성이 불변해야 하는 경우에 특히 유용하게 사용됩니다.

 

728x90

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

팩토리 패턴 (Factory Pattern)  (0) 2023.12.20