개요
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 키워드는 양립할 수 없는가?
가독성
필요한 값만 받을 수 있따
객체의 불변성