개요
- 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다.
- ‘.’을 찍어서 연관된 객체를 탐색하는 것을 객체 그래프 탐색이라고 한다.
객체 그래프 탐색
class MemberSerivceImpl {
private final MemberDAO memberDAO;
public void process() {
String memberId = "100";
Member member = memberDAO.find(memberId);
member.getTeam(); // member -> team 객체 그래프 탐색이 가능한가?
member.getOrder().getDelivery(); // 이것 또한 그래프 탐색이 가능한가?
}
}
- SQL 중심적인 개발을 한다면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 결정된다. (조회한 데이터 한해서 탐색할 수 있음)
- memberDAO 를 통해서 member 객체를 조회했지만, 이 객체와 연관된 Team, Order, Delivery 방향으로 객체 그래프를 탐색할 수 있을지 예측할 수 없다.
- 결국 데이터 접근 계층인 DAO 를 열어서 SQL을 확인해봐야 한다.
- 이것은 엔티티가 SQL에 논리적으로 종속되어서 발생하는 문제이다.
JPA 와 객체 그래프 탐색
member.getOrder().getOrderItem()... // 자유로운 객체 그래프 탐색
- JPA는 연관 관계에 있는 객체를 사용하는 시점에 적절한 SELECT SQL 을 실행한다. (지연 로딩)
- 또는 즉시 로딩을 통해서 조회할 때 연관된 모든 데이터를 함께 가져온다.
- 따라서 연관 관계가 설정된 객체는 자유롭게 객체 그래프를 탐색할 수 있다.