빌더 패턴을 쓰는 이유:
생성자를 여러개 만들기 번거러움,
다른 개발자와 협력할 때 생성자가 여러개면 어떤 생성자를 써야할지 헷깔릴 수 있음,
생성자를 만들어도 null 값을 일일이 넣어야할 경우가 있을 수 있는데 번거러움
빌더 패턴 장점:
생성자 만들기 편함
생성자 만들때 어떤 값을 넣을지 순서는 어떻게 할지 고려하지 않아도 됨
빌더 패턴 단점:
없는듯
빌더패턴 사용법(스프링):
1. 롬복(lombok) 설정
2. @SuperBuilder 어노테이션 사용
@Builder가 아닌 @SuperBuilder를 쓰는 이유
-> 부모인 BaseEntity를 상속받는 자식 객체인 Chef를 만들기 위함
-> 부모객체의 값도 입력하게 하기 위함
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Chef extends BaseEntity {
private ChefRole chefRole;
private FoodCategory foodCategory;
@OneToMany(mappedBy = "chef")
private List<Menu> menuList = new ArrayList<>();
}
부모 객체에서도 @SuperBuilder를 적는다
@SuperBuilder
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime modifyDate;
}
클라이언트 클래스에 있는 메소드에서 빌더를 통해 객체를 생성하였다.
private static void createKoreanChef() {
Chef chef = Chef.builder()
.chefRole(ChefRole.한식요리사)
.foodCategory(FoodCategory.한식)
.build();
chefList.add(chef);
}
'Design Pattern' 카테고리의 다른 글
[디자인 패턴] 전략(Strategy) 패턴 (0) | 2024.02.08 |
---|---|
[디자인 패턴] CQS(Command Query Separation) Pattern (0) | 2022.11.03 |
댓글