책 정보를 읽어서 HTTP 응답으로 내보내기 위한 클래스를 만들어보겠습니다.
만들고자 하는 내용은 책 상세 화면 응답 DTO 만들기에서 만들었던 BookReadResponseDTO.java와 완전히 동일합니다.
일단 코드는 동일하기 때문에 기존의 BookReadResponseDTO.java 코드를 복사하겠습니다.
src/main/java > com.yse.dev.book.dto > BookReadResponseDTO.java 파일을 Ctrl + C 하거나 우클릭 => Copy 해서 복사합니다.
src/main/java > com.yse.dev.book.dto 패키지에서 Ctrl + V를 클릭하거나 우클릭 => Paste를 눌러 붙여 넣습니다.
STS에서 동일한 이름이 있다는 알림을 보여주고, 새 이름을 입력하라고 팝업창을 보여줍니다. BookEditResponseDTO 로 바꾼 후 OK 버튼을 누릅니다.
만들어진 코드는 아래와 같습니다.
src/main/java > com.yse.dev.book.dto > BookEditResponseDTO.java
@NoArgsConstructor
@Getter
public class BookEditResponseDTO {
private Integer bookId;
private String title;
private Integer price;
private LocalDateTime insertDateTime;
public BookEditResponseDTO fromBook(Book book) {
this.bookId = book.getBookId();
this.title = book.getTitle();
this.price = book.getPrice();
this.insertDateTime = book.getInsertDateTime();
return this;
}
public static BookEditResponseDTO BookFactory(Book book) {
BookEditResponseDTO bookReadResponseDTO = new BookEditResponseDTO();
bookReadResponseDTO.fromBook(book);
return bookReadResponseDTO;
}
}
STS는 단순히 파일만 복사하는 것이 아니라 내용도 입력한 클래스명에 맞게 참조를 쫒아가서 다시 설정해 줍니다. 따라서 fromBook 메소드도 BookReadResponseDTO를 리턴하는 것이 아니라 BookEditResponseDTO 를 리턴하게 바뀌었습니다.
public BookEditResponseDTO fromBook(Book book) {
조금 아쉬운 점은 변수명은 자동으로 바꿔주지 않는다는 점입니다. BookFactory() 메소드의 BookEditResponseDTO 타입 변수 이름은 bookEditResponseDTO 가 아니라 bookReadResponseDTO 네요.
BookEditResponseDTO bookReadResponseDTO = new BookEditResponseDTO();
물론 이름이 bookReadResponseDTO가 되었건 foo가 되었건 프로그램 동작에는 아무런 차이도 없습니다만, 사람이 읽을 때 이상하게 보이기 때문에 바꿔주겠습니다.
CopyBookEditResponseDTO bookEditResponseDTO = new BookEditResponseDTO();
bookEditResponseDTO.fromBook(book);
return bookEditResponseDTO;