빌더 패턴(Builder Pattern) 이란?
빌더 패턴은 객체 생성 패턴 중 하나로, 복잡한 객체를 단계별로 생성할 수 있게 해준다. 이 패턴은 특히 많은 매개 변수를 가진 생성자나 객체 생성 시 다양한 옵션을 제공해야하는 경우에 유용하다. 빌더 패턴을 사용하면 객체 생성의 유연성을 높이고 , 가독성과 유지 보수성을 향상시킬 수 있다.
빌더 패턴의 구성 요소
- Builder 클래스 : 객체 생성을 담당하는 내부 클래스 이다. 이 클래스는 객체의 각 필드를 설정할 수 있는 메서드들을 제공하며, 최종적으로 객체를 생성하는 build( ) 메서드를 가진다.
- Director 클래스 (선택적) : 객체 생성 절차를 정의하는 클래스이다. 빌더 패턴의 구현 시 반드시 필요한 것은 아니며, 주로 복잡한 객체 생성 절차를 캡슐화 할 때 사용된다.
@Builder
Lombok의 @Builder는 빌더 패턴을 간편하게 구현할 수 있도록 도와주는 어노테이션이다. 빌더 패턴은 객체 생성 시 여러 매개변수를 사용할 때 유용하게 사용할 수 있는 디자인 패턴이다. Lombok의 @Builder는 복잡한 객체 생성 과정을 단순화하고, 가독성을 높이며, 불변 객체를 쉽게 만들 수 있게 한다.
사용 예시1
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BuserBean { //FormBean
private int buserno;
private String busername;
private String buserloc;
private String busertel;
//폼빈을 Entity로 변환하는 메소드
//lombok의 @Builder를 이용하면 쉽게 빌더 패턴을 운영 가능
//단계별로 Buser 객체의 각 필드를 선택적으로 설정할 수 있다.
public Buser toEntity() {
return Buser.builder()
.buserno(this.buserno)
.busername(this.busername)
.buserloc(this.buserloc)
.busertel(this.busertel)
.build();
}
}
사용 예시2 (빌더 패턴을 사용하지않은 경우와 사용한 경우를 비교해 볼 수 있다.)
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BuserDto { //데이터 전달용
//DTO는 엔티티에서 필요한 데이터만 추출하거나, 전체 데이터를 읽어 또 다른 클래스, 클라이언트에 전달
private int buserno;
private String busername;
private String buserloc;
private String busertel;
//Buser(Entity)를 BuserDto로 변환
/* 빌더 패턴 안씀
public static BuserDto fromEntity(Buser entity) {
BuserDto dto = new BuserDto();
dto.setBuserno(entity.getBuserno());
dto.setBusername(entity.getBusername());
dto.setBuserloc(entity.getBuserloc());
dto.setBusertel(entity.getBusertel());
return dto;
}
*/
//빌더 패턴 쓴 ver
public static BuserDto fromEntity(Buser entity) {
return BuserDto.builder()
.buserno(entity.getBuserno())
.busername(entity.getBusername())
.buserloc(entity.getBuserloc())
.busertel(entity.getBusertel())
.build();
}
}
주의할 점!
@Builder 어노테이션을 사용할때에는 @NoArgsConstructor 와 @AllArgsConstructor 어노테이션을 함께 작성해줘야한다!!
@Builder
@NoArgsConstructor
@AllArgsConstructor
'BackEnd > Spring' 카테고리의 다른 글
| Entity 와 DTO의 개념과 차이점 (9) | 2024.11.03 |
|---|---|
| [Thymeleaf] 3. 사용 예시 (기본, 레이아웃) (7) | 2024.11.01 |
| [Thymeleaf] 2. Thymeleaf 문법 (4) | 2024.10.30 |
| [Thymeleaf] 1. Thymeleaf 의 특징과 설정 방법 (5) | 2024.10.29 |
| Spring Annotaion 알아보기 (6) | 2024.10.23 |