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 |