나만의공간

🧱 자바 디자인 패턴 - 빌더 패턴 완전 정복 본문

IT/JAVA

🧱 자바 디자인 패턴 - 빌더 패턴 완전 정복

밥알이 2025. 5. 30. 22:38

✅ 빌더 패턴이란?

복잡한 객체를 단계적으로 생성할 수 있게 해주는 생성 패턴입니다.

  • 생성자에 파라미터가 너무 많거나
  • 어떤 속성은 필수, 어떤 속성은 옵션일 때
  • 코드 가독성과 유지보수성을 높이고 싶을 때 유용합니다.

📌 언제 사용하나요?

  • 생성자 파라미터가 너무 많아 순서가 헷갈릴 때
  • 선택적 필드를 유연하게 설정하고 싶을 때
  • 객체 생성 코드를 더 읽기 쉽게 만들고 싶을 때

😵 복잡한 생성자의 예

User user = new User("홍길동", 30, "서울", "010-1234-5678", true, "developer", "소개글");

이게 뭐가 뭔지 한눈에 잘 안 들어오죠?


😎 빌더 패턴 사용 예

User user = User.builder()
                .name("홍길동")
                .age(30)
                .address("서울")
                .phone("010-1234-5678")
                .isActive(true)
                .job("developer")
                .bio("소개글")
                .build();

어떤 값이 어떤 필드에 들어가는지 딱 보기 쉽게 표현할 수 있어요!


 

🔨 실무 예제: User 클래스에 빌더 패턴 적용

✅ User 클래스

public class User {
    private String name;
    private int age;
    private String address;
    private String phone;
    private boolean isActive;
    private String job;
    private String bio;

    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
        this.phone = builder.phone;
        this.isActive = builder.isActive;
        this.job = builder.job;
        this.bio = builder.bio;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private String name;
        private int age;
        private String address;
        private String phone;
        private boolean isActive;
        private String job;
        private String bio;

        public Builder name(String name) { this.name = name; return this; }
        public Builder age(int age) { this.age = age; return this; }
        public Builder address(String address) { this.address = address; return this; }
        public Builder phone(String phone) { this.phone = phone; return this; }
        public Builder isActive(boolean isActive) { this.isActive = isActive; return this; }
        public Builder job(String job) { this.job = job; return this; }
        public Builder bio(String bio) { this.bio = bio; return this; }

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

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

✅ 클라이언트 코드 (사용 예)

public class Main {
    public static void main(String[] args) {
        User user = User.builder()
                .name("홍길동")
                .age(30)
                .address("서울 강남구")
                .phone("010-1234-5678")
                .isActive(true)
                .job("개발자")
                .bio("자바 백엔드 개발자")
                .build();

        System.out.println(user);
    }
}

✅ 출력 결과

User{name='홍길동', age=30, job='개발자'}

✅ 빌더 패턴의 장점

장점설명
가독성 ↑ 어떤 값이 어떤 필드인지 명확히 보임
확장성 ↑ 새로운 필드를 추가해도 기존 생성자 깨지지 않음
유연성 ↑ 선택적 필드 설정이 쉬움

🛠 실무 팁: Lombok으로 빌더 패턴 쉽게 적용하기

Lombok 라이브러리를 사용하면 빌더 코드를 직접 작성하지 않아도 됩니다!

import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class User {
    private String name;
    private int age;
    private String job;
}

Lombok은 Spring Boot에서 DTO, API 응답 객체 등 다양한 곳에 활용됩니다.
코드를 줄이고, 실수도 줄일 수 있어요! 💡

Comments