DTO vs VO

1. DTO


Data Transfer Object의 약자로 계층(Layer) 간 데이터를 전달하는 객체 입니다.
조금 더 쉽게 말하면, 데이터를 담아서 전달하는 바구니라고 보시면 됩니다.
그림1
계층은 위의 그림과 같이 view, controller, service, repository등을 말합니다.
데이터 접근 메서드(Getter, Setter), 생성자 외에 기능을 갖지 않습니다. (정렬, 직렬화 등 데이터 표현을 위한 기능은 갖을 수 있습니다.)
데이터의 캡슐화를 통해 유연한 대응이 가능하여 데이터 요청 수의 감소 효과가 있습니다.


2. VO


Value Object의 약자로 값을 자체로 의미를 갖는 객체 입니다.
변하지 않는 값을 갖는 객체로 값이 변하지 않음을 보장 하여 코드의 안정성과 생산성을 높입니다.
서로 다른 이름을 가진 VO의 인스턴스가 모든 속성이 같다면 동일한 객체 입니다.
따라서 equals와 hasCode를 오버라이딩 해야 합니다.
DTO와 달리 데이터 접근 메서드 이외의 로직을 포함 할 수 있습니다.


3. 공통점과 차이점


공통점

레이어 같 데이터를 전달할 때 사용 가능합니다.
VO는 불변을 보장하기 때문에 데이터 전달 용도로 사용 가능합니다.

차이점

구분DTOVO
용도레이어 간 데이터 전달값 자체 표현
동등 결정속성값이 모두 같다고 해서 같은 객체 X속성값이 모두 같으면 같은 객체
가변/불변setter존재 시, 가변
setter 비 존재 시 불변
불변
로직데이터 접근(getter, setter) 이외의 기능을 갖지 않음데이터 접근 이외의 특정한 비즈니스 로직을 갖을 수 있음




[[10분 테코톡] 👨🏻‍💻👨🏻‍💻지노&비모의 DTO vs VO]
[10분 테코톡] 📍인비의 DTO vs VO]


© 2021. By Backtony