Builder 패턴

임유진·2025년 7월 4일

Java

목록 보기
9/12

🛠️ Builder 패턴

출처 : https://velog.io/@hero6027/Builder-Pattern%EB%B9%8C%EB%8D%94-%ED%8C%A8%ED%84%B4

: 복잡한 객체를 생성할 때 가독성유연성을 높여주는 설계 패턴

  • 객체 생성 과정을 단계별로 분리
  • 생성자나 setter를 여러 번 호출하지 않고 직관적으로 인스턴스를 생성
  • 필드 개수가 많을수록 효과적

📝 목적

  • 가독성이 좋은 객체 생성
  • 필수값과 선택값 구분
  • 생성자 오버로딩 제거

📝 장점

  • 가독성 높은 코드 작성
  • 선택적 필드 초기화
  • 객체 생성의 유연성
  • 필수값을 명시적으로 정의 가능 (@NonNull 활용)

📝 단점

  • 객체 생성 과정이 복잡할 때만 유리
  • 작은 클래스에는 오히려 코드 증가

⚙️ Lombok @Builder 어노테이션

Lombok의 @Builder는 Builder 패턴을 자동으로 구현해주는 어노테이션입니다.

📝 특징

  • 클래스명.builder() 메서드 제공

  • 체이닝 방식으로 각 필드값 설정

  • build() 메서드로 객체 생성

  • @NonNull 필드를 빌더에서 반드시 지정해야 함

    • null로 생성 시 NullPointerException 발생

📝 동작 방식

  1. Customer.builder() 호출 시 내부적으로 CustomerBuilder 객체 생성

  2. id(), pw(), job() 메서드를 체이닝으로 호출하며 값 설정

  3. build() 호출 시 최종 객체 생성

    코드 보기
    // Customer.java
    package step04.builder;
    
    import lombok.Builder;
    import lombok.NonNull;
    
    @Builder
    class Customer {
        @NonNull
        String id;  // 반드시 초기화해야 하는 필드
        int pw;
        String job;
    }
    // BuilderUseLab.java
    public class BuilderUseLab {
    
        public static void main(String[] args) {
    
            // 필수값 미지정 시 예외 발생
            // Customer c = Customer.builder().pw(0).build(); // 컴파일 경고, 런타임 예외
    
            // id만 초기화
            Customer c1 = Customer.builder().id("tester1").build();
            System.out.println(c1.id + " " + c1.pw + " " + c1.job);
    
            // id, pw 초기화
            Customer c2 = Customer.builder().id("tester2").pw(22).build();
            System.out.println(c2.id + " " + c2.pw + " " + c2.job);
    
            // id, pw, job 초기화
            Customer c3 = Customer.builder().id("tester3").pw(33).job("Student").build();
            System.out.println(c3.id + " " + c3.pw + " " + c3.job);
    
            // id, job 초기화
            Customer c4 = Customer.builder().id("tester4").job("Student").build();
            System.out.println(c4.id + " " + c4.pw + " " + c4.job);
        }
    }

📚 참고자료

profile
말하는 고구마

0개의 댓글