본문 바로가기
Java&Spring

[디자인패턴] 빌더 패턴( Builder Pattern)

by JINJINC 2025. 1. 16.
728x90
반응형

우리가 보통 Lombok이라는 의존성을 추가하여 Builder 클래스를 호출 하여 사용합니다. 이것을 직접 만들어 보도록 하겠습니다.

BuilderPattern

빌더패턴

빌더 패턴(Builder Pattern)은 객체 생성 패턴 중 하나로, 복잡한 객체의 생성 과정을 단계적으로 처리하면서 가독성과 유연성을 높이는 디자인 패턴입니다. 특히, 생성자나 팩토리 메서드의 파라미터가 많거나 객체를 단계적으로 초기화해야 하는 경우에 효과적입니다.

빌더 패턴의 특징

  1. 객체 생성의 분리: 객체의 생성 과정과 표현을 분리하여, 동일한 생성 절차를 통해 다양한 객체를 생성할 수 있습니다.
  2. 가독성 향상: 빌더를 활용하면 코드가 메서드 체이닝 방식으로 읽히기 때문에 가독성이 높아집니다.
  3. 불변성 유지: 빌더 패턴을 사용하면 생성된 객체가 불변(immutable) 상태를 유지할 수 있습니다.

코드예제

package java_design.ch01;

// 빌더 패턴 예제
public class Person {

    private final String name;  // 이름
    private final int age;      // 나이

    // private 생성자: 외부에서 직접 호출할 수 없도록 제한
    private Person(PersonBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    // 정적 내부 클래스: Builder 클래스
    public static class PersonBuilder {
        private String name;
        private int age;

        public PersonBuilder() {
            // 기본 생성자
        }

        // 이름 설정 메서드
        public PersonBuilder name(String name) {
            this.name = name;
            return this;  // 메서드 체이닝 지원
        }

        // 나이 설정 메서드
        public PersonBuilder age(int age) {
            this.age = age;
            return this;
        }

        // 최종적으로 Person 객체 생성
        public Person build() {
            return new Person(this);
        }
    }

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

    public static void main(String[] args) {
        // 빌더 패턴을 이용한 객체 생성
        Person person = new Person.PersonBuilder()
            .name("홍길동")
            .age(25)
            .build();

        System.out.println(person);
    }
}

빌더 패턴의 장점

  1. 가독성: 객체 생성 시 코드가 자연스럽게 읽히며, 직관적입니다.

    Person person = new Person.PersonBuilder()
        .name("홍길동")
        .age(25)
        .build();
  2. 유연성: 생성자에 모든 필드를 전달하지 않아도 되고, 필요한 값만 설정할 수 있습니다.

    Person person = new Person.PersonBuilder()
        .name("이순신")
        .build();
  3. 유지보수 용이성: 새로운 필드가 추가되어도 기존 코드를 수정하지 않고 빌더에만 변경 사항을 반영하면 됩니다.

빌더 패턴을 사용하면 좋은 경우

  1. 매개변수가 많은 경우: 생성자에 많은 파라미터를 전달하면 가독성이 떨어질 수 있습니다. 빌더 패턴은 이를 개선합니다.
  2. 객체의 단계적 생성이 필요한 경우: 객체를 생성하는 과정에서 여러 단계를 거쳐야 할 때 유용합니다.
  3. 불변 객체 생성: 생성 후 변경할 수 없는 객체를 생성할 때 적합합니다.
728x90
반응형

댓글