- 특징
- 객체 안에서 다른 객체를 직접 포함하지 않고, 주소(참조)로 연결
- 같은 객체를 여러 군데에서 참조할 수 있음
- DB 외래키랑 유사해서, 코드에서는 객체 참조, DB에서는 FK로 매핑
- 장점
- 직접 접근이 가능하다.
- member.getTeam()처럼 메서드 호출로 곧장 연결된 객체에 접근.
- 객체 지양적 모델링이 가능
- 현실 세계의 관계를 그대로 코드로 표현
- 재사용성이 높음
- 하나의 객체를 여러 객체가 공유하면서도 동일한 데이터를 가리킬 수 있음
- 단점
- 참조 일관성 문제
- 한 객체의 상태가 바뀌면, 그걸 참조하는 다른 객체도 영향을 받을 수 있음
- 순환 참조 위험
- A가 B를 참조하고, B가 다시 A를 참조하면 의도치 않은 무한 루프 발생
- DB와 괴리
- 객체는 레퍼런스로 자연스럽게 연결되지만 DB에서는 FK 로 조인해야 해서 매핑 비용이 생김