CS

Entity, VO, DTO

S2채닝S2 2023. 1. 30. 15:53

 

Entity

  - 다른 엔터티와 구별 가능한 식별자를 가짐

  - 시간의 흐름에 따라 지속적으로 변경됨

  - 예: 주문: 상태가 변경: 주문 진행/완료/취소 등 / 고객정보: 아이디/닉네임/주소/패스워드 등 변경됨

 

 

VO: Value Object

  - 값 객체

  - 각 속성이 개별적으로 변화하지 않고 값 그 자체로 고유한 불변 객체

    >> Entity가 Id를 가진다면 VO는 값의 조합으로 고유성을 가진다. VO는 한 번 만들어지면 그 내용은 불변이다

    >> 예: 100원, 500원 동전

  - 값이 불변이기 때문에 setter가 존재할 수 없다.

  - VO는 getter와 함께 비즈니스 로직도 포함할 수 있다.

 

VO가 불변값을 가진다는 의미

Entity는 고유한 VO를 가진다. Entity가 사라진다고 했을 때, Entitiy 자체가 사라지는 것이지 주문자, 주문 상품, 배송지(주소)가 사라지거나 변경되지는 않는다. 

<대전에 사는 홍길동이 파란색 티셔츠를 구매했습니다>
Entity: 주문
  - 주문번호(id): 57891601271
VO
  - 주문자: 홍길동
  - 배송지: 대전광역시 00로 00번길 00-0
  - 주문 상품: 파란색 티셔츠

위의 경우에서, 만약 홍길동이 주문을 취소한다면 해당 주문이 삭제되는 것이지 '홍길동', '대전광역시 00로 00번길 00-0', '파란색 티셔츠' 그 자체가 사라지지는 않는다. 주문이 변경되어도 마찬가지이다. 따라서 VO는 불변이다.

 

DTO(Data Transfer Object)

  - 데이터를 전달하기 위한 객체

  - 주로 view와 Controller사이에서 데이터를 주고받을 때 사용

  - getter/setter 메소드를 포함하고, 그 외의 로직은 포함하지 않는다.

DTO: 서비스 흐름(구조)