8.2. 책 수정 화면 응답 DTO 만들기

책 정보를 읽어서 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;