twocowsong

객체 연관관계와 테이블의 연관관계 본문

IT/JPA

객체 연관관계와 테이블의 연관관계

WsCode 2022. 5. 25. 17:50

연관관계 중에서는 N : 1 단방향 관계를 가장 먼저 이해해야 합니다.

지금부터 회원과 팀의 관계를 통해 N : 1 단방향 관계를 알아보겠습니다.

 

- 회원과 팀이 있습니다.

- 회원은 하나의 팀에만 소속될 수 있습니다.

- 회원과 팀은 N : 1 관계입니다. (다수의 인원이 한팀에 가입할 수 있습니다.)

 

객체 연관관계

 - 회원 객체는 Member.team필드로 팀 객체와 연관관계를 맺습니다.

 - 회원 객체와 팀 객체는 단방향 관계입니다.

 - 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없습니다.

 - 예를 들어 member -> team의 조회는 member.getTeam()으로 가능하지만 반대 방향인 team -> member를 접근하는 필드는 없습니다.

 

테이블 연관관계

 - 회원 테이블은 TEAM_ID 외래키로 팀 테이블과 연관관계를 맺습니다.

 - 회원 테이블과 팀 테이블은 양방향 관계입니다.

 - 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있습니다.

 - 예를 들어 MEMBER 테이블의 TEAM_ID외래 키 하나로 MEMBER JOIN TEAM 과 TEAM JOIN MEMBER 둘 다 가능합니다.

 

키하나로 양방향으로 조인하는 SQL문입니다.

// MEMBER이 기준 테이블의 경우
SELECT *
  FROM MEMBER M 
 INNER JOIN TEAM T
    ON M.TEAM_ID = T.TEAM_ID
    
// TEAM이 기준 테이블의 경우
SELECT *
  FROM TEAM T
 INNER JOIN MEMBER M 
    ON T.TEAM_ID = M.TEAM_ID

 

객체 연관관계의 테이블 연관관계의 가장 큰 차이

참조를 통한 연관관계는 언제나 단방향입니다.

객체간에 연관관계를 양방향으로 만들고싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야합니다.

결국 연관관계를 하나 더 만들어야합니다.

 

이렇게 양쪽에서 서로 참조하는것을 양방향 연관관계라 합니다.

하지만 정확하게 이야기하면 객체의 양방향 연관관계는 올바르지않습니다.

서로 다른 단방향 관계 2개일 뿐입니다.

 

객체의 단방향, 양방향 연관관계입니다.

// 단방향 연관관계
class A {
	B b;
}

Class B {}

// 양방향 연관관계
class A {
	B b;
}

Class B {
	A a;
}

 

정리하자면 아래와 같습니다.

- 객체는 참조(주소)로 연관관계를 맺습니다.

- 테이블은 외래키로 연관관계를 맺습니다.

 

이 둘은 비슷해 보이지만 매우 다른특징을 가집니다.

연관된 데이터를 조회할 때 객체는 참조(a.getB().getC())를 사용하지만 테이블은 조인을 사용합니다.

 

참조를 사양하는 객체의 연관관계는 단방향입니다.

 - A -> B (a,b)

외래키를 사용하는 테이블의 연관관계는 양방향입니다.

 - A JOIN B 가 가능하면 반대로 B JOIN A 도 가능합니다.

 - 객체를 양방향으로 참조하라면 단방향을 2개 만들어야합니다

 - A -> B (a, b) / B -> A (b, a)

 

'IT > JPA' 카테고리의 다른 글

테이블 연관관계  (0) 2022.05.27
순수한 객체 연관관계  (0) 2022.05.27
연관관계 매핑 기초  (0) 2022.05.23
[실전 예제] 요구사항 분석과 기본 매핑  (0) 2022.05.22
중간 정리  (0) 2022.05.21