Builder
💬 자바 스프링에서 빌더 패턴이란 동일한 생성 방식으로 다양한 형태의 객체를 만들 수 있는 것을 말한다. 옵셔널 멤버 변수가 많은 경우 사용하면 좋은 디자인 패턴이라고 한다.
❓장점은
✔ 생성자를 여러 개 만들 필요가 없다. 하나의 생성 방식으로 다양한 형태의 객체를 만들 수 있기 때문이다.
✔ 각 파라미터의 값을 명시적으로 넣어줄 수 있어 타입과 순서를 헷갈리는 일이 없다.
Builder 직접 만들어보기
✔ PostResponseDto 코드
@Getter
public class PostResponseDto {
private String title;
private String writer;
private String content;
private LocalDateTime createdAt;
public static PostResponseDtoBuilder builder() {
return new PostResponseDtoBuilder();
}
public static class PostResponseDtoBuilder {
private String title;
private String writer;
private String content;
private LocalDateTime createdAt;
public PostResponseDtoBuilder title(String title){
this.title = title;
return this;
}
public PostResponseDtoBuilder writer(String writer){
this.writer = writer;
return this;
}
public PostResponseDtoBuilder content(String content){
this.content = content;
return this;
}
public PostResponseDtoBuilder createdAt(LocalDateTime createdAt){
this.createdAt = createdAt;
return this;
}
public PostResponseDTO build(){
return new PostResponseDTO(title, writer, content, createdAt);
}
}
}
✔ PostResponseDto 생성 확인 코드
@Test
public void customBuilderTest(){
PostResponseDto postResponseDto = PostResponseDto.builder()
.content("오늘 밤 아름다운 별")
.title("오늘 밤")
.build();
System.out.println(postResponseDto);
}
✔ 결과
Lombok Builder 어노테이션
✅ Lombok 제공하는 @Builder 어노테이션을 쓰면 따로 구현하지 않고 사용할 수 있다.
✔ PostResponseDto 코드
@Getter
@Builder
public class PostResponseDto {
private String title;
private String writer;
private String content;
private LocalDateTime createdAt;
}
생각
Lombok을 가져다 쓰면서 쉽게 썼던 Builder인데, 직접 만들어보니 쉽지 않았다. 이론적으로도 설명하는 것도 쉽지 않았다. 그래도 이렇게 정리를 해보면서 코드도 짜보고 하니 이후에 설명도 더 잘할 수 있을 것 같다.
'개발일지 > TIL' 카테고리의 다른 글
[230711] @Transactional(readOnly = true) (0) | 2023.07.11 |
---|---|
[230710] Enum이란? (0) | 2023.07.10 |
[230708] Json 변환시 Entity 순환 참조 문제 (0) | 2023.07.08 |
[230707] Git add할 때 CRSL 관련 에러 (0) | 2023.07.07 |
[230706] String Constant Pool? (0) | 2023.07.06 |