엔티티 vs 값 객체 (Entity vs Value object)

저뉼(스님?)·2023년 11월 26일
0

나만의 설명

목록 보기
7/11
post-custom-banner

요약

object는 참조될 수 있다. 다시 말해, 이곳저곳에서 공유될 수 있다.
그런데, 참조되고 있는 object의 상태가 바뀐다면?
문제가 발생하는 경우: 그 object는 Value object
문제 없고 오히려 의도에 부합하는 경우: 그 object는 Entity

설명

object a를 다른 object들이 참조하고 있을 때,
a의 상태를 변경하면 a를 참조하고 있는 모든 object들이 영향을 받는다.

예를 들어,
object a가 사람의 주소를 나타낸다고 해보자.
세 사람이 한 가족이라 a를 참조하게 했다.
그런데 한 사람이 이사가서 x의 값을 변경했다.
그랬더니 그대로 살고 있던 나머지 두 사람의 주소도 같이 바뀌어버렸다.

이렇게 문제가 발생한다면 먼저 복사해야 한다. object a를 복사해서 object a2와 a3를 만들어 각각 다른 가족들이 참조하도록 했어야 했다.
이런 식으로 다루게 되는 object를 Value object라고 한다.

참고로, 위 object들은 생성 이후에 변하지 않기 때문에 불변이라고 표현한다.
(안전성을 위해 불변을 활용한 또 다른 예로는 Primitive wrapper class가 있다.)

반면, object a가 모임 장소의 주소를 나타낸다고 해보자.
세 사람이 모이기로 해서 a를 참조하게 했다.
그런데 모임 장소가 바뀌어서 a의 값을 변경했다.
문제 없이 세 사람 모두의 모임 장소가 잘 변경되었다.
이렇게 공유되는 object를 Entity라고 한다.

한계

개념은 그러한데, 실무적(JPA 기준)으로는 그대로 구현하기에 몇 가지 문제가 있다.

  • Value object는 식별자가 없다.
    DB를 직접 다뤄야 하는 입장이라면?
  • 1:N 관계에서 Value object들이 N이라 포함 값 컬렉션(값 타입 컬렉션)으로 만들면, 한 요소만 수정할 때도 컬렉션에 포함된 모든 요소들을 전부 삭제하고 다시 삽입한다.
    그런데 포함된 요소의 수가 많고 자주 변한다면?
post-custom-banner

0개의 댓글