본문 바로가기
Java

Builder 패턴

by DoRightting 2024. 7. 22.

1. Builder 패턴

Builder 패턴은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴입니다.

1.1 수동 구현 예시

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

    private User(UserBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.email = builder.email;
    }

    public static class UserBuilder {
        private String name;
        private int age;
        private String email;

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

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

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

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

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

1.2 사용 예시

User user = User.builder()
                .name("John")
                .age(30)
                .email("john@example.com")
                .build();

1.3 장점

  1. 가독성: 객체 생성 코드가 어떤 필드에 어떤 값을 설정하는지 명확히 볼 수 있습니다.
  2. 유연성: 선택적 매개변수가 많은 경우에 유용합니다. 필요한 필드만 설정할 수 있습니다.
  3. 불변성: 객체를 불변으로 만들 수 있습니다.
  4. 유효성 검사: build() 메서드에서 객체 생성 전에 유효성 검사를 수행할 수 있습니다.

2. @Builder 어노테이션 (Lombok)

@Builder는 Lombok 라이브러리에서 제공하는 어노테이션으로, 빌더 패턴을 자동으로 구현해줍니다.

2.1 사용법

import lombok.Builder;

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

2.2 사용 예시

User user = User.builder()
                .name("John")
                .age(30)
                .email("john@example.com")
                .build();

2.3 주요 특징

  • 모든 필드에 대한 빌더 메서드를 자동 생성
  • 클래스 레벨에 적용하면 모든 필드를 포함하는 빌더를 생성
  • 생성자에 적용하면 해당 생성자의 매개변수만을 위한 빌더를 생성

3. 주의사항

  • 클래스에 필드가 많은 경우 빌더 클래스도 커질 수 있습니다.
  • Lombok의 @Builder를 사용할 경우, IDE에 Lombok 플러그인을 설치해야 코드 어시스트 등이 정상 작동합니다.

4. 결론

Builder 패턴은 특히 많은 필드를 가진 복잡한 객체를 생성할 때 유용하며, 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다. Lombok의 @Builder 어노테이션을 사용하면 보일러플레이트 코드를 줄이고 빠르게 Builder 패턴을 구현할 수 있습니다.

'Java' 카테고리의 다른 글

구독 시스템 - 결제 주기와 구독 서비스 로직  (1) 2024.11.22
구독 시스템 - 구독 상태 및 Entity 설계  (1) 2024.11.20
람다 표현식  (0) 2024.07.16
메서드 체이닝  (0) 2023.10.25