Home [Spring] Lombok @Builder 생성자에 사용할 때 default값 설정하기
Post
Cancel

[Spring] Lombok @Builder 생성자에 사용할 때 default값 설정하기

Class에 붙이는 @Builder

Lombok에서는 @Builder라는 유용한 어노테이션을 제공합니다. 이 어노테이션을 사용하면 Builder를 자동으로 생성해줍니다. 만약 class level에 사용하면 아래와 같이 기본값을 쉽게 줄 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
@Builder
public class Example {
    @Builder.Default
    private long id = 0;

    @Builder.Default
    private long created = System.currentTimeMillis();
}

// created를 따로 지정하지 않았지만, 기본 값으로 설정 된다.
Example.builder().build();

하지만 JPA Entity에서 class level builder는 잘 사용하지 않는데, 이유는 아래와 같습니다.

  • 모든 필드를 지정할 수 있습니다. 자동생성이 설정된 id와 같이 builder에 포함하지 말아야 할 필드까지 모두 생성됩니다.
  • 따로 생성자를 만들지 않으면, Package level의 모든 필드를 포함한 생성자를 만듭니다. 굳이 all argument 생성자가 생기는 셈이죠.
  • 생성자를 만들때도 반드시 모든 인자가 포함된 생성자가 있어야 합니다.

그래서 생성자에 Builder를 붙여 쓰는 것을 권장합니다.

생성자에 붙이는 @Builder

1
2
3
4
5
6
7
8
9
10
11
public class Example {
    private long id;
    private long created;

    @Builder
    public Example(long created){
        this.created = created;
    }
}

Example.builder().build();

위와 같이 사용할 수 있습니다. 이렇게 사용하면 created만 지정할 수 있게 Builder가 생성됩니다. 하지만 생성자에 @Builder를 붙이는 방식은 @Builder.Default를 사용할 수 없습니다.

대신 이런 방식으로 기본 값을 줄 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Example {
    private long id;
    private long created;

    @Builder
    public Example(long created){
        this.created = created;
    }

    // builder함수는 원래 lombok이 만들어 주는 함수이다.
    public static ExampleBuilder builder() {
        return new ExampleBuilder()
                .created(System.currentTimeMillis())
    }
}

Example.builder().build();

builder함수는 따로 만들지 않으면 lombok이 자동으로 생성해줍니다. 물론 이렇게 저희가 직접 재정의할 수도 있습니다.

미리 기본값이 지정된 builder를 생성해서 주는 방식으로 사용하면, 기본값 지정을 흉내낼 수 있습니다.

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

[Spring] MVC 내부구조

[Spring] API서버 Error Handling 전략