Entity 와 VO 차이점 + @ElementCollection

말하는 감자·2025년 4월 30일

내일배움캠프

목록 보기
50/73

저번 프로젝트에서 엔티티와 vo 객체를 따로 나누고

엔티티(Entity)와 VO(Value Object)의 차이점

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

Entity

  • 식별 가능한 객체.
  • DB에 저장되고, 주로 @Entity 어노테이션을 사용함.
  • 엔티티는 "변경"되는 것이 자연스러운 모델임. (ex. 유저 닉네임 수정 등)

VO (Value Object)

  • 값 자체에 의미가 있는 객체.
  • 값이 같으면 같은 객체로 본다. (ID 필요 없음)
  • 주로 불변(immutable)하게 설계해서, 수정 대신 새로운 객체를 생성함.
  • 예를 들어, "주소"를 나타내는 Address VO가 있다고 치면, 주소를 수정하는 게 아니라 새로운 Address를 생성하는 방식으로 사용함.

Entity는 식별이 필요하고, VO는 값 자체로 동일성을 판단한다.












@ElementCollection

@ElementCollection을 통해 매핑된 객체는 일반적으로 VO(Value Object) 성격을 가짐.

🔹 왜 VO인가?

  • @ElementCollection은 별도 엔티티(Entity)가 아닌 값 타입 컬렉션을 매핑할 때 사용됨.
  • JPA는 해당 컬렉션에 포함된 객체를 별도의 테이블에 저장하긴 하지만, 이 객체 자체는 식별자(id)를 가지지 않고, 불변 또는 변경 불가능한 값의 덩어리로 취급됨.

🔹 특징 (VO의 조건에 부합):

  • 식별자(@Id) 없음
  • Entity의 생명주기에 종속됨
  • 값으로만 존재하고, 독립적으로 저장/삭제되지 않음
  • 불변하게 설계되는 경우가 많음 (생성자 초기화, setter 없음 등)
profile
대충 데굴데굴 굴러가는 개발?자

0개의 댓글