동일성 기준이 값이다
두 VO의 모든 의미 있는 속성들이 같다면 같은 객체로 본다. 별도의 id가 없다. 예를 들어 Money(1, "USD")와 Money(1, "USD")는 서로 다른 인스턴스여도 ‘동일한 돈’이다.
불변이 기본이다
생성 후 상태를 바꾸지 않는다. 값이 달라져야 한다면 “수정”이 아니라 “새 인스턴스 생성”으로 표현한다.
작고 자족적이며 자기 검증적이다
자신의 불변식(유효성)을 스스로 보장한다. 잘못된 값으로는 생성 자체가 되지 않게 한다.
행위가 있어도 된다
단순 데이터 주머니가 아니라, 그 값에 관한 연산을 스스로 제공해도 된다(예: money.add(tax)).
VO는 “이게 바로 그 객체냐?”(정체성)보다 “값이 같은가?”(구성)만 중요하다. 주소나 메모리 참조가 달라도, 도메인의 의미를 규정하는 속성 집합이 같으면 같은 것으로 본다. 반대로 사람, 주문 같은 엔티티는 시간에 따라 속성이 바뀌어도 “그 사람/그 주문”을 식별해야 하므로 ID가 필요하다.
Money(amount, currency)Email(local, domain) 또는 Email(address)Address(city, street, zip)DateRange(start, end)Coordinates(lat, lon)