Domain/Spring

[Spring] DTO vs VO vs Entity

by Donghwan 2021. 8. 31.

DTO

Data Transfer Object, 데이터 전송 객체라고 불리며 계층(Layer)간 데이터 교환을 위해 사용하는 객체입니다. 로직을 가지고 있지 않은 순수한 데이터 객체이며 getter/setter 메서드만 가지고 있습니다. 데이터를 전송하는 바구니라고 생각하면 됩니다.

 

VO

Value Object, 값 객체라고 불리며 특정한 값 그 자체를 표현하는 객체입니다.  서로 다른 이름을 가진 VO의 인스턴스가 모든 속성값이 같다면(hashCode, equals) 같은 객체라고 볼 수 있습니다. 또한 생성된 후 상태 변경이 불가능한 객체의 불변성을 보장합니다. DTO와 다르게 로직을 포함할 수 있습니다.

 

Entity

Entity는 실제 DB의 테이블과 매핑되는 데이터입니다. 또한 가변 객체로 생성 후 상태를 변경할 수 있으며 로직을 포함할 수 있습니다.

ID를 통해 객체를 구분합니다. 속성이 같더라도 ID가 다르면 서로 다른 객체라고 인식하고 반대로 속성이 다르더라도 같은 ID이면 같은 객체라고 인식합니다.


각 테이블 컬럼이 모두 선언되어 있어서 DTO를 대신해서 쓸 수 있지 않을까 고민하는 경우가 많은데, View에서 요청하는 값은 언제나 변경되는 값이고, 그때마다 Entity를 변경하면 영속성 모델을 구현한 Entity가 순수성을 잃어버릴 수 있어 권장하지 않습니다.

 

DTO와 Entity의 사용


참고자료

728x90
반응형

댓글