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외의 로직을 가질 수 있다.
참조:
'10분 테코톡' 카테고리의 다른 글
[10분 테코톡] Spring AOP (0) | 2021.06.08 |
---|---|
[10분 테코톡] MVC 패턴 (0) | 2021.06.06 |
[10분 테코톡] WebServer 와 Was (0) | 2021.06.05 |