CS/도메인 주도 설계

Child Entity와 Value Object, DTO 간의 차이점 분석

조금씩 차근차근 2025. 4. 27. 20:49

DDD에서 객체는 id, state, operation 이 세가지를 가지고 있어야 Entity로 승격된다.

사전 지식 - Entity로 인정받기 위한 3가지 요소

ID

  • 다른 객체와 구분할 식별자가 필요하다.

State

  • 객체가 스스로 자신의 상태를 가져야 한다.

Operation

  • 객체가 스스로 행동하기 위해 정의된 규칙이 있어야 한다.

지금부터 위 기초 지식을 바탕으로, Child Entity와 Value Object, DTO 세가지를 분류/분석해보자.

Child Entity

  • 애그리거트 루트의 하위 엔티티 중, VO가 아닌 것.
  • ID, State, Operation을 모두 가져야 한다.
  • Child Entity의 경우, 외부와 직접 상호작용하는 로직 없이, 자신의 영역 내에서만 관리되는 비즈니스 로직을 가져야 한다.
  • 모든 로직이 애그리거트 루트를 통해서만 이루어져야 한다.
    • 모든 메소드가 public 으로 공개되어서는 안된다.
    • package-private가 적당하다.
      • UML class Diagram에서는 '~' 로 표기된다.

메소드를 package-private(~) 로 표현한 Child Entity의 UML 클래스 다이어그램 형태.

Value Object

  • ID를 갖지 않고, State와 Operation만을 갖는 것을 Value Object라고 한다.
  • 일반적으로 immutable하게 설계한다.
    • 값을 직접 수정하는 것이 아닌, 객체 자체를 다른 객체로 교체하는 방식으로 수정을 구현한다.

DTO

  • Data Transfer Object
  • ID와 State만을 갖는, 데이터 전달만을 위한 객체를 의미한다.
  • 비즈니스적 관점에서, 동등성 비교 로직조차 없다.
  • 주로 내부/외부 간 데이터 전달 상황에 사용된다.

참고) 폴터가이스트 객체

  • ID와 Operation만을 갖고, 상태가 없는 객체를 의미한다.
  • 무의미하게 생성/삭제가 되기 때문에, 안티패턴으로 분류된다.
  • 해당 객체는 생성/삭제가 될 필요가 없기 때문에, 스프링 빈과 같은 싱글톤으로 두는 것이 좋다.

 

출처: 도메인 주도 설계, UML의 패턴과 적용

'CS > 도메인 주도 설계' 카테고리의 다른 글

도메인 이벤트 vs. 애플리케이션 이벤트  (0) 2025.04.28
도메인 주도 설계(DDD)  (0) 2025.03.11