본문 바로가기
Programming/Java

DTO vs VO vs Entity

by prinha 2020. 8. 14.
728x90
반응형

DTO

Data Transfer Object (데이터 전송 객체)
계층(Layer)간 데이터 교환을 위해 사용하는 객체이다.
로직을 갖고 있지않은 순수한 데이터 객체이며, getter/setter 메소드만을 갖는다.

Client <-> Controller <-> Service <-> Respository


VO

Value Object(값 객체)
서로 다른 이름을 가진 VO의 인스턴스가 모든 속성 값이 같다면 같은 객체이다.
(-> 전제 조건 equals()와 hashCode()를 오버라이딩 했을때) 
객체의 불변성을 보장한다.
로직을 포함할 수 있다.


Entity

실제 DB의 테이블과 매핑되는 클래스
Id로 구분되며 로직을 포함할 수 있다.


DTO와 VO를 같은 의미로 생각할 수 있다.

Entity를 DTO 대신 사용할 수는 있지만................but.....
View에서 표현하는 속성 값들이 요청에 따라 계속 달라질 수 있는데,
그 때마다 Entity의 속성값을 변경하면 영속성 모델을 표현한 Entity의 순수성이 모호해지기때문에
Controller에서 쓸 DTO와 Entity클래스는 분리하는게 좋다

Client <-DTO-> controller(web) - service - repository(DAO) <-domain(Entity)-> DB

 

  DTO VO Entity
용도 레이어간의 데이터 전송 의미있는 값을 표현 DB 테이블과 매핑되는 클래스
가변/불변 가변객체, 생성 후 상태 변경 가능 불변객체, 생성 후 상태 변경 불가 가변 객체, 생성 후 상태 변경 가능
로직 포함 여부 로직 포함 불가 로직 포함 가능 로직 포함 가능

 

 

참고 : https://www.youtube.com/watch?v=J_Dr6R0Ov8E&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=12

728x90
반응형