본문 바로가기

10분 테코톡

[10분 테코톡] DTO 와 VO

728x90

결론 : DTO는 데이터 전달용, VO는 값 표현용

DTO 

  • Data Transfer Object
  • 데이터를 전달하기 위해 사용하는 객체
  • 데이터를 담아서 전달하는 바구니

더 정확하게는 계층간 데이터를 전달하기 위한 객체이다.

Controller와 Service가 둘 사이의 데이터를 주고 받기 위해서 DTO에 데이터를 담아서 전달한다.

 

DTO의 특징

  • 오직 getter/setter 메서드 만을 갖는다.
  • 다른 로직을 갖지 않는다.

DTO Class 와 Entity Class를 분리하자

  • EntityClass는 절대로 요청이나 응답값을 전달하는 Class로 사용하면 안된다.
  • EntityClass는 데이터 베이스와 Mapping되어 있는 핵심 Class이기 때문이다.
  • EntityClass를 기준으로 테이블이 생성되고 schema가 변경된다.
  • 요청이나 응답값을 전달하는 Class로는 View의 변경에 따라 다른 Class에 영향을 끼치지 않고 자유롭게 변경할 수 있는 DTO를 사용해야한다.
  • 응답값으로 여러 테이블을 join한 결과값을조회할 경우가 빈번하기에 Entity Class만으로는 응답값을 표현하기 어려운 경우가 많다. 그래서 Entity Class와 View의 결과 값을 전달해주는 DTo는 꼭 분리해서 사용해야한다.

VO란?

  • Value Object
  • 값 그자체를 표현하는 객체
  • DTO가 Getter Setter 이외의 로직을 포함할수 없는 것과 달리 VO는 이외의 로직을 포함할 수 있다.

DTO

-레이어간 데이터 전달

-속성값이 같다고 해서 같은 객체가 아니다.

-setter 존재시 가변, setter 비 존재시 불변

-getter,setter이 외의 로직을 갖디 않는다.

 

VO

-값 자체 표현

-속성 값이 모두 같으면 같은 객체다.

-불변

-getter/setter외의 로직을 가질 수 있다.

 

참조:

https://youtu.be/z5fUkck_RZM

'10분 테코톡' 카테고리의 다른 글

[10분 테코톡] Spring AOP  (0) 2021.06.08
[10분 테코톡] MVC 패턴  (0) 2021.06.06
[10분 테코톡] WebServer 와 Was  (0) 2021.06.05