Post

@Builder

@Builder

@Builder

  • Lombok이 제공 하는 어노테이션
  • 빌터 패턴 (Builder Pattern)을 자동으로 만들어주는 기능

Builder Pattern

  • 복잡한 객체를 단계별로 (조립하듯이) 만들어주는 디자인 패턴
  • 객체를 만들 때 만은 파라미터가 있거나 옵션이 많은 객체 깔끔하게 생성하기 위해 사용돼.
1
User user = new User(1L, "Jin", 34, "Seoul", true, null, ...);

생성자에 파라미터가 많으면

  • 순서 외우기 힘듦
  • 값이 어떤 의미인지 바로 안보임
  • 선택적(optional) 옵션이 많으면 생성자 오버로드가 폭발함

빌터 패턴이 해결 하는 문제

  1. 파라미터 순서 기억할 필요 없음
1
2
3
4
5
6
7
User user = User.builder()
        .name("Jin")
        .age(34)
        .address("Seoul")
        .active(true)
        .build();

  • 어떤 값이 무엇인지 바로 보임
  • 순서 상관 없음
  1. 필드 선택적으로 설정 가능 : 필요한 값만 넣고 나머지는 안 넣으면 됨.

  2. 가독성 매우 높음 : “조립하듯이” 만들기 때문에 명확함.


기존 생성자 방식

1
2
new User(id, name, age, address, isActive, email, gender, ...)

  • 순서 안보임
  • 필수/선택 옵션 구분 안됨
  • 실수(파라미터 순서 오류) 확률 높음

빌터 패턴 방식

1
2
3
4
5
6
7
User.builder()
    .id(1L)
    .name("Jin")
    .age(34)
    .address("Seoul")
    .build();

  • 목적이 선명하고
  • 누락되면 바로 눈에 보이고
  • 생성자 오버로딩(수많은 생성자들)이 필요 없음

Lombok 없이 직접 만든다면 이렇게 생김 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class User {
    private Long id;
    private String name;
    private int age;

    public static class Builder {
        private Long id;
        private String name;
        private int age;

        public Builder id(Long id) {
            this.id = id;
            return this;
        }

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

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

        public User build() {
            return new User(id, name, age);
        }
    }

    private User(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

사용법 :

1
2
3
4
5
6
User user = new User.Builder()
        .id(1L)
        .name("Jin")
        .age(34)
        .build();

This post is licensed under CC BY 4.0 by the author.