저번 프로젝트에서 엔티티와 vo 객체를 따로 나누고
| 항목 | 엔티티(Entity) | VO(Value Object) |
|---|---|---|
| 정의 | 고유 식별자(ID)가 있는 객체 | 고유 식별자가 없는 값 객체 |
| 주요 목적 | 데이터베이스 테이블과 매핑해서 데이터 관리 | 하나의 '값' 개념을 표현하기 위함 (주소, 돈, 기간 등) |
| 식별 방법 | ID(PK)로 식별 | 객체의 모든 값이 같으면 동일한 것으로 취급 |
| 불변성 | 보통 변경 가능(mutable) | 대부분 불변(immutable)하게 설계 |
| 생명 주기 | 데이터베이스 레코드의 생명 주기와 같음 | 엔티티 안이나 다른 객체 안에서 함께 생명주기 가짐 |
| 예시 | User, Order, Product 등 | Address, Money, Period 등 |
| 특징 | - DB 저장을 위해 설계 - JPA @Entity 사용 - ID 필수 | - 별도 테이블 없음 - 값 자체를 의미 - 주로 @Embeddable 사용 가능(JPA) |
Entity는 식별이 필요하고, VO는 값 자체로 동일성을 판단한다.
✅
@ElementCollection을 통해 매핑된 객체는 일반적으로VO(Value Object)성격을 가짐.
@ElementCollection은 별도 엔티티(Entity)가 아닌 값 타입 컬렉션을 매핑할 때 사용됨.