양방향
2026년 5월 17일
-
양방향(Bidirectional)은 객체(Object) 두 개가 서로 상대방을 참조하는 관계이다.
-
정확히는 단방향 참조 두 개를 하나의 양방향 관계처럼 관리하는 것이다.
-
데이터베이스(DataBase)에서는 외래 키(Foreign Key) 하나로 양방향 JOIN이 이미 가능하므로, 양방향 개념은 순수 객체 레벨의 이야기이다.
-
양방향일 때 반드시 연관관계의 주인을 지정해야 하며,
mappedBy속성으로 주인 필드를 명시한다. -
주인이 아닌 쪽은 외래 키(Foreign Key) 변경 불가 — 읽기 전용이다.
연관관계의 주인
- 외래 키(Foreign Key)를 가진 테이블(Table)과 매핑된 엔티티(Entity)가 주인이다.
- 일대다(OnetoMany) / 다대일(ManyToOne) 관계에서 항상 N(다) 쪽이 외래 키를 가지므로 주인이 된다.
Member(N) ←FK→ Team(1) 주인: Member (FK를 가진 쪽) mappedBy: Team 쪽에 mappedBy = "team" 설정
다대일 양방향 예시
Java
주의사항
- 양방향 편의 메서드: 주인 쪽 setter에서 반대 쪽도 함께 세팅해야 메모리 상 객체가 일관성을 유지한다.
- 무한루프 위험:
toString(),JSON 직렬화등에서 양방향 참조 순환이 발생할 수 있다. - 남용 금지: 실제로 역방향 탐색이 필요할 때만 양방향 설정. 아니면 단방향이 더 안전하다.