-
[spring] DTO 와 VO 무슨 차이가 있을까Spring&SpringBoot 2024. 8. 14. 15:58
현재 진행하는 프로젝트의 소스를 보는데 문득 VO에 로직이 이렇게 많이 들어있다고? 라는 생각이 들었다.
저번에 했던 프로젝트에서는 VO가 아닌 DTO로 데이터를 전달했었고 그때는 로직이 전혀 없었기 때문에 문득 궁금해졌다.
그동안은 DTO와 VO는 이름만 다르고 똑같이 데이터 전달하는거겠니 했는데 찾아보니 아니었다.
DTO ( Data Transfer Object )
- 순수하게 데이터를 담아 계층 간으로 전달하는 객체
- 로직을 갖고 있지 않은 순순한 데이터 객체이며 메서드는 getter/setter만 갖는다.VO ( Value Object )
- 값 그 자체를 나타내는 객체
- Read-Only 속성으로 getter만 가능하다.
- DTO와 다르게 로직을 포함할 수 있으며 VO의 경우 특정 값 자체를 표현하기 때문에 불변성 보장을 위해 생성자를 사용해야 한다.
- VO는 서로 다른 이름을 갖는 VO 인스턴스라도 모든 속성이 같다면 두 인스턴스는 같은 객체인 것이 핵심이다.간단하게 이정도의 차이가 있는데 우연히 보게 된 인프런 답변을 보니 내가 왜 헷갈렸는지 알 것 같다.
vo는 2가지 의미로 사용됩니다.
1. 단순히 데이터 값을 전달하기 위한 용도로 사용되는 객체라는 뜻 (DTO와 같은 뜻으로 혼용해서 사용합니다. 저는 이 경우 DTO라고 합니다. DTO = 데이터를 전송하는 목적으로 사용하는 객체이지요.)
2. 도메인 주도 설계에서 이야기하는 값 객체(Value Object)의 의미가 있습니다. 이 부분에 대한 자세한 내용은 JPA 기본편 강의에서 자세히 설명드립니다.(저는 vo라고 하면 이 의미로 사용합니다.)VO의 첫 번째 의미로 혼용하는 경우가 있어 VO랑 DTO는 같은거겠지 생각하고 넘어갔었던 것 같다.
그래도 이번에 간단하게 찾아보니 정리가 되는 느낌이다.
(참고)
https://maenco.tistory.com/entry/Java-DTO%EC%99%80-VO%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://www.inflearn.com/community/questions/111159/domain%EA%B3%BC-repository-%EC%A7%88%EB%AC%B8
728x90'Spring&SpringBoot' 카테고리의 다른 글
[스프링MVC - 1편] 서블릿 (0) 2024.12.22 [스프링MVC - 1편] 웹서버 & 웹 애플리케이션 서버 (0) 2024.12.22 [springboot] 의존성주입(DI)와 순환참조 문제 해결 (0) 2024.08.14 [스프링부트/웹 애플리케이션 개발]스프링 데이터 JPA, QueryDSL (0) 2023.01.17 [스프링부트/웹 애플리케이션 개발]API 개발 고급 - 실무 필수 최적화 (0) 2023.01.17