본문 바로가기

개발일지/TIL

[230709] Builder 패턴과 어노테이션

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인데, 직접 만들어보니 쉽지 않았다. 이론적으로도 설명하는 것도 쉽지 않았다. 그래도 이렇게 정리를 해보면서 코드도 짜보고 하니 이후에 설명도 더 잘할 수 있을 것 같다.