빌더패턴은 무엇일까?

2025. 6. 2. 00:36·탐구하기

빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 같은 생성 절차에서 서로 다른 표현 결과를 만들 수 있도록 하는 디자인 패턴입니다. 주로 생성할 객체의 필드가 많거나, 선택적인 필드가 많을 때 사용하면 유용함.


🔧 1. 빌더 패턴이 필요한 이유

예시: 일반 생성자 방식 (문제점)

public class User {
    private String name;
    private int age;
    private String email;
    private String phone;

    public User(String name, int age, String email, String phone) {
        this.name = name;
        this.age = age;
        this.email = email;
        this.phone = phone;
    }
}

사용할 때:

User user = new User("Alice", 25, "alice@example.com", "010-1234-5678");

✅ 문제점: 필드가 많아질수록 생성자가 복잡해지고 파라미터 순서를 헷갈릴 수 있으며, 일부 필드만 설정하고 싶어도 모든 값을 넣어야 합니다.


🏗️ 2. 빌더 패턴 예제

public class User {
    private String name;
    private int age;
    private String email;
    private String phone;

    // private 생성자
    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.email = builder.email;
        this.phone = builder.phone;
    }

    // static inner Builder 클래스
    public static class Builder {
        private String name;
        private int age;
        private String email;
        private String phone;

        public Builder(String name) {  // 필수 파라미터
            this.name = name;
        }

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

        public Builder email(String email) {
            this.email = email;
            return this;
        }

        public Builder phone(String phone) {
            this.phone = phone;
            return this;
        }

        public User build() {
            return new User(this);
        }
    }

    // toString
    @Override
    public String toString() {
        return name + ", " + age + ", " + email + ", " + phone;
    }
}

✅ 사용 예시:

User user = new User.Builder("Alice")
    .age(25)
    .email("alice@example.com")
    .phone("010-1234-5678")
    .build();

System.out.println(user);

🧱 빌더 패턴 사용 예시 (실제 라이브러리)

  • Lombok의 @Builder 어노테이션을 사용하면 쉽게 구현 가능합니다.
import lombok.Builder;

@Builder
public class User {
    private String name;
    private int age;
    private String email;
    private String phone;
}
User user = User.builder()
    .name("Alice")
    .age(25)
    .email("alice@example.com")
    .build();

✅ 빌더 패턴을 사용하는 이유

🔹 1. 복잡한 객체 생성을 간결하고 명확하게 하기 위해

  • 필드가 많거나, 선택적으로 설정해야 하는 필드가 있는 경우 생성자나 setter 방식은 코드가 지저분해지고 실수가 잦아집니다.
  • 빌더 패턴은 필요한 필드만 명시적으로 설정하면서도, 객체 생성을 한 줄로 처리할 수 있게 도와줍니다.

🔹 2. 가독성과 유지보수 향상

  • 어떤 값이 어떤 필드에 대응되는지 명확하게 드러납니다.
  • 필드 순서를 외울 필요도 없습니다.

🔹 3. 불변(immutable) 객체를 쉽게 만들 수 있음

  • 객체 생성 후에는 변경되지 않도록 하여, 안전하고 예측 가능한 코드 작성이 가능합니다.
  • 멀티스레드 환경에서도 유리합니다.

🔹 4. 메서드 체이닝으로 깔끔한 코드 작성

  • .name("홍길동").age(30).email("hong@example.com") 처럼 체이닝 방식으로 작성 가능.
  • 매우 직관적이며 읽기 쉽습니다.

🌟 빌더 패턴의 장점 정리

장점 설명

✅ 가독성 좋음 어떤 값이 어떤 필드인지 명확히 알 수 있음
✅ 유연한 객체 생성 필드 순서 상관없이 필요한 필드만 설정 가능
✅ 안전한 객체 생성 불완전하거나 잘못된 상태의 객체 생성을 방지
✅ 확장에 용이함 필드가 추가돼도 기존 코드를 크게 변경할 필요 없음
✅ 메서드 체이닝 가능 코드가 간결하고 읽기 쉬워짐
✅ 불변 객체 생성에 유리 final과 함께 사용하면 객체 상태 변경 불가

📌 언제 빌더 패턴을 쓰면 좋은가?

  • 생성자에 인자가 3개 이상일 때
  • 어떤 인자는 필수고, 어떤 인자는 선택인 경우
  • 생성자 오버로딩이 많아지는 경우
  • 가독성과 안정성을 모두 챙기고 싶을 때

📎 비교: 생성자 vs setter vs 빌더

방식 특징 단점

생성자 한 번에 생성 필드 많으면 순서 외우기 힘듦
setter 필드 하나씩 설정 객체가 불완전한 상태일 수 있음
빌더 가독성 + 안정성 + 유연성 코드가 조금 더 길어질 수 있음 (직접 구현 시)

✅ 결론

빌더 패턴은 안전하고 가독성이 높은 방식으로 객체를 생성하고 싶을 때 사용하는 디자인 패턴입니다. 객체를 유연하고 명확하게 만들고 싶을 때 주로 사용함.

 

 

'탐구하기' 카테고리의 다른 글

AWS EC2 서버 구성 및 배포, AMI 생성 및 복제  (0) 2025.06.10
RestAPI란 무엇일까??  (1) 2025.06.02
Maven과 Gradle의 역할과 기능은 무엇일까?  (2) 2025.06.02
@SpringBootApplication은 어떤역할을 하는 어노테이션일까?  (0) 2025.06.02
프록시 패턴과 AOP에 대해서 연관성  (0) 2025.05.22
'탐구하기' 카테고리의 다른 글
  • AWS EC2 서버 구성 및 배포, AMI 생성 및 복제
  • RestAPI란 무엇일까??
  • Maven과 Gradle의 역할과 기능은 무엇일까?
  • @SpringBootApplication은 어떤역할을 하는 어노테이션일까?
ayinyun
ayinyun
ayinyun 님의 블로그 입니다.
  • ayinyun
    ayinyun 님의 블로그
    ayinyun
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • SQL 개발 공부 (8)
      • JAVA 개발 공부 (4)
      • JavaScript(JS) (1)
      • React (1)
      • 탐구하기 (38)
      • KPT회고록 (14)
      • SpringBoot (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ayinyun
빌더패턴은 무엇일까?
상단으로

티스토리툴바