다대일(N:1) - 연관관계의 필요성

PPakSSam·2022년 1월 7일
0
post-thumbnail

다대일(N:1) 목차

다대일(N:1) - 단방향 연관관계 목차


연관관계가 필요한 이유

객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것
feat) 조영호(객체지향의 사실과 오해)

예제 시나리오

  • 회원과 팀이 있다.
  • 회원은 하나의 팀에만 소속될 수 있다.
  • 회원과 팀은 다대일 관계다.

객체를 테이블에 맞추어 모델링(연관관계가 없는 객체)

[Member]

@Entity
 public class Member { 
	
	 @Id @GeneratedValue
	 private Long id;
     
	 @Column(name = "USERNAME")
	 private String name;
     
	 @Column(name = "TEAM_ID")
	 private Long teamId; 
     
	 // getter, setter... 

 } 

[Team]

@Entity
 public class Team {

	 @Id @GeneratedValue
	 private Long id;
     
	 private String name;
	 
     	// getter, setter... 
}

[JpaMain]

public class JpaMain {

	public static void main(String[] args) {
    	
        ... 생략
        
        // 팀저장
        Team team = new Team();
        team.setName("teamA");
        em.persist(team);
        
        // 회원 저장
        Member member = new Member();
        member.setUsername("member1");
        member.setTeamId(team.getId());
        em.persist(member);
        
        // Member의 팀을 조회하기 위해서는 teamId라는 매개체가 필요
        // 객체지향스럽지 않다!
        Member findMember = em.find(Member.class, member.getId());
        Long findTeamId = findMember.getTeamId();
        Team findTeam = em.find(Team.class, findTeamId);
        
        ... 생략
    }
}

객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력관계를 만들 수 없다.

  • 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
  • 객체는 참조를 사용해서 연관된 객체를 찾는다.
  • 테이블과 객체 사이에는 이런 큰 간격이 있다.
  • 따라서 연관관계 매핑이 필요한 것이다!!!
profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글