@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();
'JPA' 카테고리의 다른 글
JPA - @EntityListeners 엔티티의 생명주기 이벤트 리스닝 (0) | 2024.07.17 |
---|---|
JPA - @NoArgsConstructor & @AllArgsConstructor 개념 및 사용법 (0) | 2024.05.16 |
@GeneratedValue (2) | 2023.11.21 |
@NoArgsConstructor (1) | 2023.11.21 |
JPA - 엔티티 패밍 (0) | 2023.04.28 |
댓글