엔티티란 ?
엔티티 : 도메인 모델을 구현한 도메인 객체를 의미한다.
값 객체 : 도메인 모델을 구현한 도메인 객체
엔티티와 값 객체의 차이는 동일성을 통해 식별이 가능한지 아닌지에 있다.
속성으로 구별되지 않는 객체
예 : 사용자
사용자는 속성이 아닌 동일성(identity)으로 식별된다.
엔티티의 성질
엔티티는 속성이 아닌 동일성으로 식별되는 객체다.
- 가변이다.
- 속성이 같아도 구분할 수 있다.
- 통일성을 통해 구별된다.
가변이다.
엔티티는 가변성을 갖는 객체다.
값 객체는 불변성을 갖기 때문에 교환(대입)해 수정했지만, 엔티티는 수정을 위해 객체를 교환하지 않는다.
엔티티의 속성을 수정하려면 객체의 행동을 통해 수정하면 된다.
단, 모든 속성이 반드시 가변일 필요는 없다.
속성이 같아도 구분할 수 있다.
서로 다른 엔티티를 구별하는 데는 식별자(identity)가 쓰인다.
동일성
식별자는 동일성의 실체다. 그러므로 식별자를 가변으로 할 필요는 없다.
엔티티 비교는 동일성을 나타내는 식별자(id)만을 대상으로 한다.
엔티티의 판단 기준 - 생애주기와 연속성
생애주기의 존재 여부와 그 생애주기의 연속성 여부가 중요한 판단 기준이 된다.
예 :
사용자
- 사용자가 생성하는 동시에 태어나 삭제와 함께 죽음을 맞는다.
- 사용자는 말 그대로 생애주기를 가지며 연속성을 갖는 개념이다.
- 엔티티로 판단하기에 문제가 없다.
값 객체도 되고 엔티티도 될 수 있는 모델
같은 대상이라도 어떤 환경에 있느냐에 따라 모델링 방법이 달라진다.
예 :
타이어
- 타이어는 자동차의 한 부품이며, 특성에는 세세한 차이가 있어도 서로 바꿔 쓸 수 있으므로 값 객체로 나타내기 적합한 개념이다.
- 타이어 공장이라면 타이어에는 생산 루트가 있으며 루트를 통해 그 타이어가 언제 만들어졌는지 등 개체를 식별하는 것이 중요하다. 그러므로 여기서의 타이어는 엔티티를 타나태는 것이 더 적합하다.
도에인 객체를 정의할 때의 장점
- 자기 서술적인 코드가 된다.
- 도메인에 변경사항이 있을 시, 코드에 반영하기 쉽다.
다양한 행동이 기술된 객체는 그 소프트웨어가 어떤 도메인 지식에 관심이 있는지,
또 그 지식을 어떻게 식별하는지를 나타낸다.
이들 객체는 나중에 개발자가 도메인을 이해하는데 유용한 힌트가 된다.
'책터디 > 도메인주도설계철저입문' 카테고리의 다른 글
04. 부자연스러움을 해결하는 도메인 서비스 (0) | 2022.03.21 |
---|---|
02. 시스템 특유의 값을 나타내기 위한 '값 객체' (0) | 2022.03.17 |
01. 도메인 주도 설계란? (0) | 2022.03.15 |
들어가며. (0) | 2022.03.15 |