본문 바로가기

STUDY/Java

Java | Builder패턴 (Lombok @Builder)

빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.
출처: 위키백과 - 빌더패턴

빌더 패턴은 아래와 같이 구현할 수 있다.

public class User {

  private int id;
  private String name;
  private String email;
  private String nickname;

  // getter 생략 (setter는 생성하지 않는다)

  // private 생성자
  private User(Builder builder) {
      this.name = builder.name;
    this.email = builder.email;
    this.nickname = builder.nickname;
  }

  // User클래스 안에 선언한 정적 내부 클래스
  public static class Builder {

    private int id;
    private String name;
    private String email;
    private String nickname;

    // name과 email은 필수로 입력해야 하는 필드
    public Builder(String name, String email) {
        this.name = name;
        this.email = email;
    }

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

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

  }

}

그리고 이런식으로 사용한다.

User user = new User.Builder("Oladipo", "vo4@miami.heat")
                    .nickname("feathery")
                    .build();

빌더 패턴을 사용하는 이유?

  • 필수 및 선택인자가 많아질수록 생성자 방식보다 가독성이 좋다.
  • 자바빈 패턴(setter를 이용하는 방식)보다 안전하다. - setter가 없기 때문에 객체를 변경할 수 없음 (불변성을 보장)

+) Builder Pattern을 빠르게 구현하기

사실 빌더 패턴을 알게된 것도 롬복 때문이다. 롬복의 @Builder어노테이션을 이용해 쉽고 간편하게 빌더 패턴을 구현할 수 있다.

public class User {

  private int id;
  private String name;
  private String email;
  private String nickname;

  @Builder
  public User(String name, String email, String nickname) {
      this.name = name;
      this.email = email;
      this.nickname = nickname;
  }

}

+) References