본문 바로가기

내일배움캠프/Today I Learned

[TIL] 나의 서른 세번째 회고록

- 회원가입/로그인(인증/인가)

- 게시판 생성, 수정, 삭제, 조회

- 댓글 생성, 수정, 삭제, 조회

 

지금까지 개인프로젝트를 구현시킨 기능들이다. 

 

이번 프로젝트를 만들면서 인증/인가(jwt)와 DTO 중요성을 배웠다. 

 

그 중에서도 결합도를 낮추기 위해서 직접 Entity에 접근하지 않기 위해 DTO만들어서 접근하였다. 

그러나 Request할때 Response할때 모두 DTO파일을 따로 만들어주려고 하니

프로젝트에 파일이 효율적이기 못하게 늘어나는 것 같다는 생각이 들어서 

어떻게 하면 각 기능마다 1개의 DTO로 Request와 Reponse를 사용할 수 있을까를 고민했다. 

 

그렇다면 어떤 방법으로 DTO를 관리해야 할까?

 

DTO를 Inner Static Class로 관리

DTO 패키지 내 클래스 파일들을 깔끔하게 관리하기 위해 Inner Class(Nested Class)로 DTO를 관리하는 것!!

 


public class BoardDto {

    @Getter
    @Setter
    public static class BoardRequestDto {
        private String boardTitle;
        private String boardWriter;
        private String contents;
        private String password;

        private BoardMember boardMember;

        public BoardRequestDto(String boardTitle, String boardWriter, String contents, String password){
            this.boardTitle = boardTitle;
            this.boardWriter = boardWriter;
            this.contents = contents;
            this.password = password;
        }

        @Getter
        static class BoardMember{
            private Long memberId;
            public BoardMember(Members member){
                this.memberId = member.getId();
            }
        }
    }

    @Getter
    public static class BoardResponseDto{
        private Long boardId;
        private String boardTitle;
        private String boardWriter;
        private String contents;
        private String password;

        private List<CommentDto.CommentsResponseDto> commentsResponseDtoList;

        public BoardResponseDto(Boards board) {
            this.boardTitle = board.getBoardTitle();
            this.boardWriter = board.getBoardWriter();
            this.contents = board.getContents();
            this.password = board.getPassword();
        }

        public BoardResponseDto(Boards board, List<CommentDto.CommentsResponseDto> commentsResponseDtoList) {
            this.boardId = board.getId();
            this.boardTitle = board.getBoardTitle();
            this.boardWriter = board.getBoardWriter();
            this.contents = board.getContents();
            this.password = board.getPassword();
            this.commentsResponseDtoList = commentsResponseDtoList;
        }
    }
}

 

이렇게 하면 1개의 Class 파일로 DTO를 Inner Class로 관리하면 조금 더 깔끔하게 패키지를 관리할 수 있고,

코드의 캡슐화를 증가시키며, 코드의 복잡성도 줄일 수 있다는 장점이 생긴다고 한다.