• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Entity와 VO에 대해..

23.11.11 11:48 작성 조회수 281

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요.

도메인모델을 만들때 Entity와 VO는 단순히 불변성을 가지고 구분하는 것인지요?

그리고 JPA에서의 Entity와는 다른 개념인지 궁금합니다.

감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요 강의자 한정헌입니다. 간단히 답변을 드리면

도메인 주도 설계(DDD)에서 엔터티(Entity)와 값 객체(Value Object)는 고유성의 여부를 중심으로 하는 개념이며, 불변성은 값 객체의 특성 중 하나일 수 있습니다. 두 개념을 좀더 설명드리면

  1. 엔터티(Entity):

    • 엔터티는 고유한 식별자에 의해 정의되는 객체입니다. 시간과 다양한 상태를 통해 유지되는 독특하고 고유한 식별자를 가지고 있습니다.

    • 동일한 속성을 가진 두 엔터티는 식별자가 다르면 여전히 구별됩니다.

    • 엔터티는 일반적으로 가변적입니다. 시간이 지남에 따라 상태가 변할 수 있지만 식별자는 유지됩니다.

    • 예: 유일한 고객 ID를 가진 '고객' 엔터티. 두 고객이 동일한 이름과 주소를 가지더라도 ID가 다르면 서로 다른 엔터티로 간주됩니다.

  2. 값 객체(Value Object):

    • 값 객체는 특정 속성을 설명하는 객체로, 고유한 식별자가 없습니다. 그 식별자는 속성의 동일성에 기반합니다.

    • 값 객체는 일반적으로 불변성을 가지고 있습니다. 한 번 생성되면 상태가 변경되지 않습니다.

    • 예: 빨강, 초록, 파랑 값을 가진 '색' 객체. 동일한 RGB 값으로 두 색 객체가 동일하게 간주됩니다.

불변성은 값 객체의 일반적인 특성 중 하나이지만 엔터티와 값 객체를 구별하는 주요 기준은 식별자의 개념입니다. 엔터티는 고유한 식별자를 가지고 있으며, 값 객체는 그렇지 않습니다.

JPA(Java Persistence API)에서 엔터티와 관련된 용어는 DDD의 엔터티와 관련이 있지만 정확히 동일하지는 않습니다. JPA의 엔터티는 데이터베이스 테이블에 매핑되는 영속 데이터 객체로, 주로 테이블의 레코드를 나타냅니다. DDD의 엔터티와 일치할 수 있지만 항상 도메인 주도 설계의 모든 개념과 일치하다고 볼 수는 없을 것 같네요.

요약하면, 용어의 겹침이 있지만 "엔터티"라는 용어가 사용되는 특정 맥락을 이해하는 것이 중요합니다.

감사합니다.