본문 바로가기

우아한10분테크톡

DTO vs VO

https://www.youtube.com/watch?v=z5fUkck_RZM 

 

 

1) DTO

 

DTO는 Getter, Setter만을 갖는다.
Setter로 넣어서 DTO를 보내고 받는 쪽에서 Getter로 꺼내 쓴다.

 

하지만 Setter를 갖는 DTO의 값은 가변적이다. -> Setter없이 생성자로 만들면 불변객체 -> 데이터 전달과정에서 변조되지 않음을 보장 가능 -> 더 안정적.

 

 

Entity는 절대 요청or응답 값 전달하는 클래스로 사용하면 안됨. 

Entity는 DB와 매핑되어있는 핵심 클래스이다.

( Entity는 수많은 service, 비지니스 로직과 연결되어있다. -> Entity바꾸면 얽힌 변경사항이 많다.

-> 그래서 요청이나 응답 값을 전달하는 클래스는 DTO를 사용.

 

 

 

2) VO

=Value Object

= 값 그 자체를 표현하는 객체

 

만원의 고유번호가 다르다고 다른 만원이라 하지 않는다. -> 값(만원)만을 보고 비교한다. 

-> 고유번호=각 객체의 주소

 

VO는 값 자체를 표현하기 떄문에 불변객체여야한다. -> Setter는 포함X -> 생성자로만 값을 초기화.

 

DTO는 Getter, Setter 이외의 다른 로직을 포함할 수 없다 <-> VO는 이외의 로직 포함 가능.

 

 

 

일반적인 객체는 equals, hashCode 비교가 모두 불일치로 나온다.

 

완전한 VO를 만들기 위해서는 객체를 속성값들로만 비교하도록 equals, hashCode 메서드를 둘 다 오버라이드 해줘야한다.

 

Money객체가 완전한 VO가 되었다.

 

 

 

 

# 정리 ( 중요 )

VO는 값 자체를 표현하는 용도이기 때문에 불변이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

DTO와 VO의 차이를 구체적으로 알고 있지 않았는데 각각의 용도를 파악하니 쉽게 이해되었다.

 

 

 

 

 

 

 

 

꾸준히 다시보자.

 

1. 220825

2. 220912

 

 

'우아한10분테크톡' 카테고리의 다른 글

Sharding, Clustering, Replication  (0) 2022.09.06
Process vs Thread  (0) 2022.09.03
GC  (0) 2022.08.17
Servlet vs Spring  (0) 2022.08.17
Proxy, Forward Proxy, Reverse Proxy, Load Balancer  (0) 2022.07.31
Recent Posts
Popular Posts
Recent Comments