본문 바로가기
JPA

@Builder

by 지민재 2024. 1. 4.
반응형
SMALL

@Builder

@Builder

@Builder 는 Project Lombok이라는 라이브러리에서 제공하는 어노테이션 중 하나입니다. Project Lombok은 자바 코드에서 반복적으로 작성되는 코드, 특히 getter, setter, equals, hashCode, toString 등의 코드를 어노테이션을 통해 자동으로 생성해주는 기능을 제공합니다. @Builder 어노테이션은 빌더 패턴을 자동으로 생성하는데 사용됩니다.

JPA(Java Persistence API)에서 엔터티 클래스를 작성할 때, 다양한 속성들을 갖는 생성자 및 빌더 패턴을 사용하게 됩니다. 이런 반복적인 코드를 간소화하고 가독성을 높이기 위해 @Builder 어노테이션을 사용할 수 있습니다.

 

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String author;
    private int pageCount;

    // @Builder 어노테이션을 통해 빌더 패턴을 사용
    @Builder
    public Book(String title, String author, int pageCount) {
        this.title = title;
        this.author = author;
        this.pageCount = pageCount;
    }
}
  • 위의 코드에서 @Builder 어노테이션은 Book 클래스의 빌더 패턴을 자동으로 생성합니다. @Builder를 사용하면 다음과 같은 코드가 자동으로 생성됩니다.

 

public class BookBuilder {
    private String title;
    private String author;
    private int pageCount;

    BookBuilder() {
    }

    public BookBuilder title(String title) {
        this.title = title;
        return this;
    }

    public BookBuilder author(String author) {
        this.author = author;
        return this;
    }

    public BookBuilder pageCount(int pageCount) {
        this.pageCount = pageCount;
        return this;
    }

    public Book build() {
        return new Book(title, author, pageCount);
    }

    // Getter, Setter 생략
}
  • 이렇게 생성된 빌더 클래스는 @Builder 어노테이션이 적용된 엔터티 클래스의 객체를 생성하는 데 사용할 수 있습니다. 클라이언트 코드에서는 다음과 같이 빌더 패턴을 사용할 수 있습니다.

 

Book book = Book.builder()
    .title("Design Patterns: Elements of Reusable Object-Oriented Software")
    .author("Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides")
    .pageCount(395)
    .build();

댓글