Search

@Builder를 왜 사용하는가?

Tags
Date
2023/09/17

개요

Builder는 오브젝트 생성을 위한 디자인 패턴 중 하나입니다. 롬복이 제공하는 @Builder를 사용하면 Builder 클래스를 따로 개발하지 않고도 Builder 패턴을 사용해 오브젝트를 생성할 수 있습니다.

1. 사용 예제

User.class
import lombok.Builder; @Builder public class User { private final String firstName; private final String lastName; private final int age; private final String email; // Getters for User class... }
JavaScript
복사
외부에서 Instance 생성 시
User user = User.builder() .firstName("John") .lastName("Doe") .age(30) .email("john.doe@example.com") .build();
JavaScript
복사
왜 Builder를 왜 쓰는것인가?
Builder 패턴을 사용하는 것은 생성자를 사용해 오브젝트를 만드는 것과 유사합니다. 하지만 생성자에 비해 장점이 있다면 Builder는 생성자와 다르게 매개변수의 순서를 기억할 필요가 없다는 것입니다.

2. 응용 예제

@NoArgsConstructor @AllArgsConstructor @Data public class TodoDTO { private String id; private String title; private boolean done; public todoDTO(final TodoEntity entity) { this.id = entity.getId(); this.title = entity.getTitle(); this.done = entity.isDone(); } public static TodoEntity toEntity(final TodoDTO dto){ return TodoEntity.builder() .id(dto.getId()) .title(dto.getTitle()) .done(dto.isDone()) .build(); } }
JavaScript
복사

3. 빌더와 관련해서

@Builder의 위치는 어디가 좋을까?
@Builder 어노테이션을 사용할 때, 그 위치는 주로 클래스의 위에 선언하거나, 생성자나 메서드에 선언할 수 있습니다. 그렇다면 @Builder를 선언하기 좋은 위치가 존재할까요?
빌더 사용시 주의 사항
@Builder 사용 시 생성자를 인식하지 못하는 경우가 존재합니다.
또한 @NoArgsConstructor를 붙여줘야 합니다.
@NoArgsConstructor와 final 키워드는 양립할 수 없는가?
가독성
필요한 값만 받을 수 있따
객체의 불변성