본문 바로가기

[Java] Builder와 Accessors

민이(MInE) 2023. 6. 23.
반응형

Builder

어떤 객체를 생성할 때 필요한 파라미터만 골라서 설정할 수 있게 해준다.

예를 들어 아래와 같은 Item Entity가 있다고 하자.

 

public class Item {

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

    @Enumerated(EnumType.STRING)
    private ItemStatus status;

    private String name;

    private String title;

    private String content;

    private BigDecimal price;

    private String brandName;

    private LocalDateTime registeredAt;

    private LocalDateTime unregisteredAt;

    @CreatedDate
    private LocalDateTime createdAt;

    @CreatedBy
    private String createdBy;

    @LastModifiedDate
    private LocalDateTime updatedAt;

    @LastModifiedBy
    private String updatedBy;

 

이 Item에 대한 객체를 생성할 때 아래와 같이 해줄 수 있다.

 

Item item = Item.builder()
        .status(body.getStatus())
        .name(body.getName())
        .title(body.getTitle())
        .content(body.getContent())
        .price(body.getPrice())
        .brandName(body.getBrandName())
        .registeredAt(LocalDateTime.now())
        .partner(partnerRepository.getOne(body.getPartnerId()))
        .build();

※Builder로 생성할 때에는 순서도 상관쓰지 않아도 된다.

 

 

Accessors

Setter를 이용하여 객체를 생성할 때 여러줄로 하나하나 다 생성해주어야 하는 경우가 있다.

entityItem.setStatus(body.getStatus())
entityItem.setName(body.getContent())
entityItem.setTitle(body.getTitle())
entityItem.setContent(body.getContent())
entityItem.setPrice(body.getPrice())
entityItem.setBrandName(body.getBrandName())
entityItem.setRegisteredAt(body.getRegisteredAt())
entityItem.setUnregisteredAt(body.getUnregisteredAt());

 

@Accessors를 추가하면 아래와 같이 이어서 바로 생성해줄 수 있다.

entityItem.setStatus(body.getStatus())
        .setName(body.getContent())
        .setTitle(body.getTitle())
        .setContent(body.getContent())
        .setPrice(body.getPrice())
        .setBrandName(body.getBrandName())
        .setRegisteredAt(body.getRegisteredAt())
        .setUnregisteredAt(body.getUnregisteredAt());
반응형

'Java' 카테고리의 다른 글

[Java]Optional 이란?  (0) 2023.06.11

댓글