Programming/삽질일지

[12/26 TIS] 혹시 이 글을 보고 계신다면 제발 도와주세요.

JKROH 2023. 12. 27. 14:49
반응형

 문제는 댓글의 API DTO에서 발생했다. 댓글을 등록하는 API DTO는 아래와 같은 구조로 생겼었다.

public final class CommentApiDto {

    @Getter
    @Builder
    public final static class Post {
        private final String content;
    }
}

 

 이 구조는 자유 게시글 등록 API DTO를 고대로 가져온 것이다. 해당 클래스도 살펴보자.


public final class FreeBoardApiDto {

    @Getter
    @Builder
    public final static class Post {
        private final String title;
        private final String content;
    }
}

 

 필드가 한 개냐, 두 개냐의 차이일 뿐 완전히 똑같았다. 그런데 CommentApiDto.Post를 사용하려고 하면 오류가 발생했다. 에러 메시지를 검색해보면서 기본 생성자가 없어서 문제가 발생했다는 사실을 알 수 있었고, 그래서 기본 생성자를 만들어주니 문제는 해결됐다. 그러나 내가 원하는 방향성은 아니었다. 또한 문제에 대한 궁금증이 전혀 해결되지 않기도 했다.

 

 먼저, 나는 기본적으로 Data 클래스는 불변으로 만들고자 한다. 따라서 모든 필드는 final로 선언되길 바란다. 그러나 기본 생성자를 만들기 위해선 필드를 final로 둬선 안된다. 하나짜리 필드에 빌더는 너무 과하니 모든 필드를 주입하는 생성자만 만들고자 해도 기본 final키워드를 사용하고 싶으면 기본 생성자를 만들 수 없다.

 

 또한 무슨 차이가 있길래 FreeBoardApiDto의 @Builder는 사용이 되고, CommentApiDto의 @Builder는 오류가 발생하는지에 대한 해답은 전혀 나오지 않았다. 아무래도 필드가 한 개인 클래스에 @Builder를 적용해서 이런 문제가 발생한 것 같은데, Lombok의 공식문서를 살펴봐도 필드 갯수에 대한 설명은 없고, 여기저기 검색해봐도 관련된 글을 찾기가 어려워 참으로 난감하다... 혹시 이 글을 보고 계신 고수 분이 계시다면 답변 해주시면 정말 너무나 감사하겠다.

반응형