Java/SpringBoot

Builder

dev.jelee 2024. 11. 7. 22:34

코드보고 해석을 하다가 자주 보게 되는 Builder.

객체를 만들어준다는 것 밖에 모르기 때문에 제대로 알기 위해서 정리해보자.


1. Builder 패턴 정의

Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 하는 디자인 패턴입니다. 이 패턴은 객체를 생성하는 과정을 여러 단계로 나누어, 각 단계에서 필요한 값만 설정할 수 있도록 합니다. 이때, 객체의 생성자에서 처리할 수 없는 복잡한 초기화 작업을 분리하여 가독성을 높이고 유지보수를 용이하게 합니다.

 

핵심 아이디어: 생성자 대신에 Builder 클래스를 사용해 객체를 생성하며, 빌더 객체에 필요한 값을 차례대로 설정한 후 최종적으로 객체를 생성합니다.


2. Builder 패턴을 사용하는 이유

  • 가독성 향상: 객체의 생성자가 복잡하거나, 많은 필드를 가질 때, 여러 개의 생성자나 매개변수를 사용하는 것보다 Builder를 이용한 명시적인 방법이 가독성을 높입니다.
  • 불변 객체 생성: Builder 패턴을 사용하면 생성한 객체를 불변(immutable)으로 만들 수 있습니다. 즉, 객체를 생성 후 값이 변경되지 않게 할 수 있습니다.
  • 유연한 객체 생성: 객체의 속성이 많거나 선택적인 경우, Builder 패턴을 통해 필요한 속성만 설정하고 나머지 속성은 기본값을 사용할 수 있어 유연하게 객체를 생성할 수 있습니다.
  • 오버로딩 방지: 여러 생성자를 오버로딩하는 대신, 빌더 클래스를 사용하면 하나의 생성자로 다양한 객체를 만들 수 있습니다. 예를 들어, 어떤 필드는 생략하고, 어떤 필드는 반드시 설정할 수 있습니다.

3. Builder 패턴 사용 방법

1. Builder 클래스 정의하기

먼저, Builder 클래스를 정의하여 객체를 생성할 수 있는 메서드를 제공합니다. 빌더 클래스 내부에 생성할 객체를 위한 필드와 메서드들을 설정합니다.

public class Person {
    private String name;
    private int age;
    private String address;

    // Private constructor to prevent direct instantiation
    private Person(PersonBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
    }

    public static class PersonBuilder {
        private String name;
        private int age;
        private String address;

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

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

        public PersonBuilder setAddress(String address) {
            this.address = address;
            return this;
        }

        // Build the final Person object
        public Person build() {
            return new Person(this);
        }
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
    }
}

 

2. Builder 사용하기

객체를 생성할 때는 PersonBuilder를 사용하여 단계별로 설정하고, 마지막에 build() 메서드를 호출하여 객체를 생성합니다.

public class Main {
    public static void main(String[] args) {
        // Builder 패턴을 사용하여 객체 생성
        Person person = new Person.PersonBuilder()
                            .setName("John Doe")
                            .setAge(30)
                            .setAddress("123 Main St")
                            .build();

        System.out.println(person);
    }
}

 

3. Builder 활용 장점

  • 명확한 코드: 각 필드를 명시적으로 설정할 수 있으므로 생성자에 비해 코드가 명확합니다.
  • 선택적 필드: Builder는 필요한 필드만 설정하고 나머지는 기본값을 유지할 수 있습니다.
  • 불변 객체: Person 객체는 final로 선언되며 생성 후 변경할 수 없으므로, 안전하게 불변 객체를 생성할 수 있습니다.

요약

Builder 패턴 정의

Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 도와주는 디자인 패턴으로, 객체 생성 시 가독성과 유연성을 높여줍니다.

 

왜 사용하는지

1. 가독성 향상: 복잡한 객체를 생성할 때 명시적인 방법을 제공.

2. 불변 객체: 객체 생성 후 수정할 수 없는 객체 생성 가능.

3. 유연성: 선택적 속성 설정 가능.

 

어떻게 사용하는지

1. Builder 클래스 정의: 객체를 생성할 메서드를 제공.

2. 객체 생성: Builder 객체를 사용해 필요한 값 설정 후 build() 메서드 호출.


 

출처: chat gpt

 

 

'Java > SpringBoot' 카테고리의 다른 글

Throwable cause, Throwable  (1) 2024.11.07
@JsonInclude  (1) 2024.11.07
Enum  (1) 2024.11.07
@JsonFormat  (0) 2024.11.07
messages.properties  (0) 2024.11.07