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에서는 '~' 로 표기된다.
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 |