인프런 커뮤니티 질문&답변

빈센트님의 프로필 이미지

작성한 질문수

실전! Querydsl

예제 도메인 모델과 동작확인

연관관계 메소드 질문

20.12.10 16:51 작성

·

196

0

안녕하세요 강사님.

기본강의에서도 연관관계 메소드를 공부하여 알고 있었습니다.

양방향 연관관계에서 주인이 되는 쪽을 수정하면 주인이 아닌쪽에서도 자동으로 수정이 되지만 객체의 개념으로 접근하기 위해 양쪽을 모두 수정해주는 연관관계 메소드가 필요한것인가요?

주인이 되는 쪽만 잘 수정해주면 사실상 연관관계 메소드가 필요 없는 것이지요? 

그렇다면 changeTeam 연관관계 메소드를 이용해서 팀을 바꾸었을때 바뀐 팀의 멤버를 추가하는 것이 맞다면 반대로 바뀌기 전의 팀에서도 멤버를 제거해야되는것이 아닌가요?

예를 들어서

팀1 -> 멤버1

팀2 -> 멤버2

에서 멤버1을 팀2로 옮길시 연관관계 메소드는 add만 해주시기때문에

팀1 -> 멤버1

팀2 -> 멤버2, 멤버1

로 되어 제거를 해주어야 한다고 생각합니다.

하지만 테스트 결과 주인이 되는 쪽을 수정하니 자동으로 멤버1이 제거가 되더군요. 이 또한 객체의 개념을 살리기 위해 제거가 자동으로 되지만 제거가 되는 remove()를 추가해줘야 할까요?

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

2020. 12. 10. 20:53

안녕하세요. 빈센트님 좋은 질문입니다.

Q: 양방향 연관관계에서 주인이 되는 쪽을 수정하면 주인이 아닌쪽에서도 자동으로 수정이 되지만 객체의 개념으로 접근하기 위해 양쪽을 모두 수정해주는 연관관계 메소드가 필요한것인가요? 주인이 되는 쪽만 잘 수정해주면 사실상 연관관계 메소드가 필요 없는 것이지요? 

-> 연관관계의 주인만 수정해주면 JPA가 DB의 FK를 업데이트 하기 때문에, JPA를 사용할 때는 연관관계들이 잘 정리됩니다. 그런데 문제는 순수한 객체 상태에서 이것들을 사용할 때 문제가 발생합니다. 예를 들어서 JPA를 사용하지 않고, 순수한 객체 상태에서 테스트 코드를 작성할 때 문제가 발생할 수 있습니다.

따라서 예시를 들어주신 것 처럼 remove()도 추가해주는 것이 맞습니다.

그런데 이런 부분들이 막상 해보면 remove()도 해야하고, 너무 복잡해지기 때문에, 크게 문제가 되지 않으면 연관관계의 주인만 잘 관리하고, 양쪽으로 연결해주는 것 정도만으로 타협하는 것도 좋은 선택지 입니다.

감사합니다.