인프런 커뮤니티 질문&답변

jd님의 프로필 이미지

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

22강. Section3 정리

section3 와 section4 32강 질문입니다!

해결된 질문

23.05.12 13:32 작성

·

269

·

수정됨

1

안녕하세요, 강사님. 항상 좋은 강의 너무 감사드립니다. section3과 section4 32강을 들으면서 질문이 생겨서 글 남기게 되었습니다.

  1. 인스턴스화를 new를 사용해서 객체로 만들어준다고 이해하면 될까요? 예를 들어 User.class를 Board.class에서 사용할 때 User user = new User()로 만드는 것이 인스턴스화인지 궁금합니다.

  2. 스프링 컨테이너에 대해 맞게 이해한 것인지 궁금합니다. 제가 이해한 바로는 컨테이너는 스프링 빈들을 대신 인스턴스화하고, 빈들끼리의 관계를 자동으로 맺어주고(의존성 자동으로 설정), 생성자를 통해 스프링 빈들끼리 서로 사용이 가능하게 한다는 것입니다. 이해한 개념이 맞는지 궁금합니다.

  3. returnBook관련 질문입니다. loanBook의 코드를 최대한 재활용해서 작성해보았는데요,

@Transactional
public void returnBook(BookReturnRequest request) {
    Book book = bookRepository.findByName(request.getBookName());
    if(book == null) {
        throw new IllegalArgumentException("대출할 책이 존재하지 않습니다.");
    }
    // 유저 찾고
    User user = userRepository.findByName(request.getUserName());
    if(user == null) {
        throw new IllegalArgumentException("사용자가 존재하지 않습니다.");
    }
    // 이미 대출 중인 책인지 확인하고
    if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), true)) {
        throw new IllegalArgumentException("이미 반납된 책입니다.");
    }
    // 책 찾고, 반납
    UserLoanHistory history = userLoanHistoryRepository.findByBookName(book.getName());
    history.returnBook();
}

테스트 결과, 딱히 이상이 없어보입니다. existsByBookNameAndIsReturn(book.getName(), true)를 사용해도 괜찮을까요?

감사합니다!

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

2023. 05. 12. 23:23

안녕하세요, b_lion님! 또 좋은 질문 남겨주셔서 감사드립니다!! 🙂

하나씩 답변 드려볼게요!!

 

[1. new User()가 인스턴스화인가?!]

네 맞습니다!! "인스턴스화"라는 것은 코드로 작성되어 있는 우리의 클래스를 new 라는 연산자를 사용해 '인스턴스'로 만들고 메모리에 적재하는 과정을 의미합니다!

따라서, new User()User 클래스를 인스턴스화 하는 것이 맞습니다! 👍

 

[2. 스프링 컨테이너는 빈을 인스턴스화 해주고, 연결해주는게 맞는가?!]
정~~확하십니다!! 👍👍 강의에서도 언급 드렸지만, 이렇게 "스프링 컨테이너"라는 존재가 있어야만 우리가 어떤 코드를 변경할 때 야근 없이 (=변경 범위를 최소화 하며) 코드를 변경할 수 있게 됩니다 ㅎㅎㅎ

 

[3. exist를 사용해도 되는가?]

네!!! 전혀 문제 없습니다! 😊 이렇게 직접 코드를 작성해보시다니 너~무 좋네요!!!

Spring Data JPA를 활용해 작성해주신 exists 코드를 보시고, JdbcTemplate을 이용해 작성했던 exists 를 떠올려보시면, Spring Data JPA의 강력함과 편리함을 한 번더 느끼실 수 있을 겁니다 ㅎㅎㅎ

 

감사합니다!! 또 궁금한 점 생기시면 편하게 질문 올려주세요~~ 🙇🙇

jd님의 프로필 이미지
jd
질문자

2023. 05. 13. 13:38

답변 감사합니다! 남은 강의도 열심히 들을게요!

jd님의 프로필 이미지

작성한 질문수

질문하기