2023.04.27

Jay Ji·2023년 4월 28일
0

I write TIL I close my Eyes

목록 보기
20/28
post-thumbnail

코드리뷰 후 Spring 기술 매니저님에게 받은 질문을 아래와 같이 정리해보았다.

1. @RequiredArgsConstructor 어노테이션을 사용하지 않는다면 어떻게 구현할 수 있나요?

@RequiredArgsConstructor 어노테이션은 boardService dependcy를 주입시키기 위한 어노테이션입니다. 자동적으로 constructor를 생성해줍니다.
BoardController를 예시로 들으면 private final BoardService boardService를 먼저 인스턴스 변수로 만든 뒤 아래와 같이 코드를 직접 작성해야합니다.
public BoardController (BoardService boardService) {
this. boardService = boardService;
}

2. Board entity에 @Getter 어노테이션을 사용하셨는데 해당 어노테이션 사용 시 어떤 코드가 생성되나요?

@Getter 어노테이션을 사용함으로써 getter 메서드가 해당 클래스의 모든 개인 필드에 대하여 자동적으로 생성이 되었습니다. 해당 메서드를 사용하여 외부에서 액세스 할 수 있습니다.

3. Board entity에 @Setter 어노테이션을 사용하는 것과 update 메서드를 생성해서 쓰는 행위는 어떤 차이가 있나요?

@Setter 어노테이션을 사용할 수는 있지만 모든 필드를 언제든지 업데이트 할 수 있는 위험이 있어 Board entity에는 적합하지 않다고 생각했습니다.
반면, update 메서드를 생성해서 쓰는 이유는 캡슐화가 가능하고 유지 보수에 더 수월하다고 생각하였습니다.
해당 부분에 추가적으로 설명해주시면 큰 도움이 될 것 같습니다.

4. BoardService의 각 메서드의 반환값이 Delete만 dto로 반환하는 이유가 뭘까요?

Board Entity에서 반환할게 없으므로, dto를 사용하여 사용자에게 잘 삭제 되었다는 메시지를 보내기 위해 사용하였습니다.

5. 추가적으로 BoardService 클래스의 update, delete 메서드에 board1 객체가 어쨰서 다시 불려와져야 하나요?

게시판을 삭제하기 전에 사용자가;
board에서는 아이디와 매칭하는지 board1에서는 비밀번호가 정확하게 매칭하는지
확인하기 위해 board와 동일하게 사용하였는데,
굳이 필요가 없을 것 같아 아래와 같이 수정하였습니다.
Board board = boardRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
boardRepository.findByIdAndPassword(id, password).orElseThrow(
() -> new IllegalArgumentException("비밀번호가 일치하지 않습니다.")
);
boardRepository.deleteByIdAndPassword(id, password);
return new ResponseDto(true, "Deleted Successfully");
}

profile
Think out of the Box

0개의 댓글