1월 3일 객체 그래프 탐색 (JPA 사용 이유 포함.)
객체 그래프 탐색
객체는 자유롭게 그래프를 탐색할 수 있어야 한다.
연관 관계가 이어져 있을때 모두 조회가 가능해야 한다.
맘대로 되는건 아니고 처음 실행한 sQL에 의해 탐색 범위가 정해져 버린다.
예를 들어 처음 SQL로 Member와 tean을 가져올때
member와 team의 값만 채워서 가령 order같이 전혀 관계가 없는건 조회할 수 없다.
엔티티 신뢰문제
public void Process(){
Member member = memberDAO.find(memberID);
ㄴ 이 구조를 탐색할 수 없다면
member.getTeam();
member.getOrder().getDelivery();
ㄴ 이 객체들은 조회못할 가능성이 생긴다.
}
그렇다고 모든 객체를 미리 로딩해둘수도 없다.
그래서 대안으로 상황에 맞게 만들 수 밖에 없다.
결론.
SQL을 사용하면 진정한 의미에 계층 분활이 쉽지는 않다,
비교
1.
String memberId = "100"
Member member1 = memberDAO.getMember(memberId);
Member member2 = memberDAO.getMember(memberId);
이 경우 두 Member1, 2 는 당연히 다른 별도의 객체이다.
그 이유는 DB조회한 것을 각각 new 로 각 객체에 담아 반환했기 때문에 서로 다른 주소값을 가지게 된다.
그러나 자바 컬렉션에서 조회할 경우
String memberId = "100";
Member member1 = list.get(memberID);
Member member2 = list.get(memberID);
이때는 같은 list에서 참조한것이기 때문에 같은 값을 불러온다 .
즉 이미 주소값이 정해진 member라는 객체를 2번 불러낸것 뿐이기 때문에 이 member1,2는 같은것이다.
DB와 Collection 객체의 경우 모두 상황이 다르고 점점 복잡해진다.
객체를 자바 컬렉션에 저장하듯 DB에 저장할수는 없을까
그것을 해결해주는게 JPA를 사용하는 궁극적인 이유이다.