yeoseon / tip-archive

트러블 슈팅 및 팁을 모아두는 레포 (Today I Learned)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

엔티티와 VO

yeoseon opened this issue · comments

Entity 와 VO의 차이를 잘 설명한 것 같아서 갈무리 해둔다.
https://opennote46.tistory.com/196?category=621589

엔티티

어떤 객체가 일차적으로 식별성을 가질 경우 엔티티로 고려하자. 손정욱이라는 사람의 키는 변경되고 주소도 변경될 것이다.(연속성) 하지만 한국에서 손정욱이라는 사람은 동일하다. 주의할 점은 자바의 ==연산자로 객체가 동일하다는 것과는 다른 의미이다. 엔티티의 생명주기를 잘 관리하자. 도메인 모델의 핵심이 바로 엔티티이다. 식별할 수 있는 고유키가 없다면 일반적인 해법은 유일한 아이디를 생성하는 것이다.

VO

VO는 식별성이 없다. 이러한 객체는 사물의 어떤 특징을 묘사한다. 주소는 VO인가? 엔티티인가? 정답은 상황에 따라 다르다. 쇼핑몰에 주문한 단순히 넣는 텍스트값으로 본다면 VO이다. 그렇지만 택배시스템과 같이 주소가 관리되고 택배경호에 활용되어 유일하게 식별되어야 한다면 엔티티이다. 주의할 점은 VO는 immutable 해야 한다. 모든 필드의 값이 같다면 두 VO는 같은 것이다. Person이라는 엔티티에 Name이라는 VO가 있다고 가정해보자. VO는 성이 손이고 이름이 정욱이라는 객체이다. Person의 이름이 변경된다면 Person의 VO가 변경되는 것이지 VO의 내부상태 성과 이름이 변경되는 것이 아니라는 것이다. 이에 VO는 쉽게 공유하고 복사해서 사용할 수 있다. 성능에 문제가 있다면 FlyWeight 패턴의 사용을 고려하라.

출처: https://opennote46.tistory.com/196?category=621589 [욱'S 노트]