작성
·
167
1
안녕하세요 강사님 :)
설명하신 내용 중에 헷갈리는 부분이 있어 질문 드리고자 합니다.
pdf 페이지 기준으론, 33 34 35페이지에 해당하는 부분입니다! (01. JPA 소개)
33페이지에서 member.getOrder() 을 실행하면 null이 발생한다고 말씀하셨는데, 왜 null이 발생하는 지 잘 모르겠습니다.
제 생각으론 member class에 getOrder() 메서드가 있다는 것은, member class에 order 객체가 있다는 것으로 봐도 무방할 것 같은데
아래코드에 제가 생각한 부분을 적어놨습니다.
class Member {
Order order;
public Order getOrder() {
}
}
왜 null이 반환되는 것인지 잘 모르겠습니다.
34페이지에서 memberDAO.find()의 반환값인 member 객체를 신뢰할 수 없는 이유를 잘 모르겠습니다.
강사님께서 find()의 내부 동작으로 쿼리가 무엇이 날라갈 지 모르기 때문이라고 도중에 말씀하셨는데, 무엇을 의미하는 것인지 잘 모르겠습니다.
35페이지는 강사님께서 설명하신 내용을 이해할 수가 없습니다.
모든 객체를 미리 로딩할 수 없기 때문에 상황에 따라 회원 조회 메서드를 여러개 만든다고 말씀하셨는데,
미리 로딩한다는 말의 의미를 모르겠고,
왜 미리 로딩할 수 없기 때문에 회원 조회 메서드를 여러개 만들어야 하는 지 잘 모르겠습니다.
부족한 점이 많아 질문을 많이 드려서 죄송합니다. ㅠㅠ
늘 감사합니다
답변 1
3
안녕하세요. 이원태님, 공식 서포터즈 David입니다.
.
1. 객체를 담는 변수가 존재한다고 변수 안에 객체가 들어가 있는게 아닙니다. 아무것도 없을 수 있습니다. (null) 그 이유는 Member 테이블과 Team 테이블을 조인했기 때문입니다. Order 테이블과 조인하여야 Member 내 Order 객체를 확인했을 때 null이 안 나옵니다. 물론 특정 Member와 연관된 Order가 있어야 합니다.
2. 1번 항목과 같은 맥락입니다. find() 메서드가 내부적으로 Member를 불러올 때 Team과 Order가 함께 조인될지, Team만 조인될지 메서드 내 작성된 쿼리를 까보기 전까지 모릅니다. Member 불러오니깐 다 있겠거니 하고 Order를 getOrder했는데 내부적으로 Order를 조인하지 않았다면 null이 발생할 수 있죠.
3. Member를 불러올 때
Team만 조인하는 메서드
Team과 Order 둘 다 조인하는 메서드
둘 다 Member를 가져오는 메서드인데 가져오는 데이터의 수는 다릅니다.
Member를 불러올 때 그냥 다 불러오면 되지 않느냐?라고 반문하실 수 있지만 성능을 위해 필요한 것만 불러오는게 좋습니다.
강의를 처음 들으셔서 혼란스러우신 것 같습니다.
하나하나 이해가 안 되시더라도 강의를 쭉 듣다보면 알아지는 것들이 있으니 강의를 먼저 한 싸이클 쭉 돌려보시는 것을 추천드립니다:)
.
감사합니다.
상세한 설명 감사합니다. :)
말씀하신대로, 처음 듣는 생소한 용어들이 너무 많아 혼란스러운 상태인 것 같습니다.
조언해주신대로 한 싸이클 먼저 돌려보겠습니다.