연관 관계 매핑

목표

  • 객체와 테이블 연관 관계의 차이를 이해한다.

    • 객체는 그래프로 쭉쭉 참조할 수 있지만 테이블은 외래키를 가지고 접근한다.

  • 객체의 참조와 테이블의 외래 키를 매핑하는 방법을 알아본다.

용어 이해

  • 방향(Direction)

    • 단방향, 양방향

  • 다중성(Multiplicity)

    • 다대일, 일대다, 일대일, 다대다

  • 연관 관계의 주인(Owner)

    • 객체 양ㅂ아향 연관 관계는 관리하는 주인이 필요하다.

연관 관계가 필요한 이유

객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.

객체 지향적으로 설계하기 위해서는 이해가 필요하다.

예제 시나리오

  • 회원과 팀이 있다.

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

  • 회원과 팀은 다대일 관계다.

    • 하나의 팀에 여러 회원이 소속될 수 있다.

  • 객체 연관 관계

    • 테이블 내용에 맞춰서 모델링하면 teamId를 member가 그대로 가져간다.

    • team을 레퍼런스로 가져가야 하는데 DB처럼 teamId만 가지고 있다.

    • 연관 관계가 없는 형태가 나온다.

  • 테이블 연관 관계

    • member에 team_id가 있다는 건 각 member가 어느 팀에 소속 됐는지 표시하는 것이다.

    • 즉, team은 여러 member를 가질 수 있다는 뜻이다.

@Entity
public class Member {

    private Long id;
    
    @Column(name = "USERNAME")
    private String name;

    // 테이블처럼 FK만 가지고 있는다.
    @Column(name = "TEAM_ID")
    private Long teamId;
}

@Entity
public class Team {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
}
  • 테이블은 외래키로 조인해서 연관된 테이블을 찾는다.

  • 객체는 참조를 사용해 연관된 객체를 찾는다.

  • 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들기 힘들다.

Last updated