관리 메뉴

팀드모네 IT Blog

[Spring] VO와 DTO란? 그리고 둘의 공통점/차이점 본문

3. 강의실/[5분 스프링프레임워크]

[Spring] VO와 DTO란? 그리고 둘의 공통점/차이점

남명 팀드모네 2019. 2. 8. 18:49

안녕하세요. 플랫폼공작소입니다. 지난 시간에 이어서 스프링 어노테이션에 관한 포스팅을 작성하겠습니다.


1. VO란?

- Value Object의 약어로 값을 변경할 수 없는 Read–Only 객체를 의미

VO는 값을 가지는 객체로써 색상(빨강,초롱,파랑), 돈(액수와 통화)을 예시로 들 수 있습니다. 색상 클래스에서 빨강이라는 객체가 나왔다고 가정해봅시다. 이 객체는 A라는 프로젝트에서도 빨간색을 나타내고 B라는 프로젝트에서도 빨간을 나타내고, 현실세계에서도 빨간색을 나타냅니다. 값 자체로 의미를 가지며 이 값은 어디에 있든 같습니다.


변하지 않는 값을 가지는 객체이기 때문에 Value Object입니다.



그러니까, VO에 setter를 쓰는게 너무 이상하다는 것입니다.

이미 빨강을 빨간색이라고 정의되어 있는데, 여기에 setter로 무엇을 넣으려고 합니까?

VO에는 readOnly-getter기능만 존재해야지 setter가 선언되는 순간 VO와 DTO가 차이점은 없습니다.

'DTO에는 비즈니스 로직을 넣을 수 없고 VO에는 비즈니스 로직을 넣을 수 있다'로 구분할 수는 없지 않겠습니까.


2. DTO란?

- Data Transfer Object의 약어로 데이터의 전송을 위한 객체를 의미.

데이터의 캡슐화를 통해 데이터 요청 수 감소 효과가 있습니다.


3. DTO와 VO의 공통점

- 레이어 간 데이터 전달에 사용


4. DTO와 VO의 차이점

DTO 

 VO

값이 변함(setter / getter)


 값이 변하지 않음(getter만 존재)


DTO dto('빨강') != DTO dto2('빨강')

 

VO vo1('빨강') == VO vo2('빨강')



VO의 경우 값이 같으면 동일한 객체로 판정됩니다. <- 이것이 핵심입니다.

DTO의 경우 값이 같더라도 다른 객체로 판정됩니다. 참조객체여서 그렇습니다.


* 상이한 개념임에도 불구하고 VO와 DTO는 현재 혼용되고 있는 것으로 보입니다.

* 혹시 댓글을 남겨주시면 검토 후 포스팅을 수정하겠습니다.

추가로 궁금한 점이 있다면 댓글에 남겨주세요.


다음 포스팅은 @ModelAttribute, @RequestParam, @Configuration에 대해서 알아보겠습니다.

다음 포스팅으로 이동 >> https://doctorson0309.tistory.com/406



reference : https://www.youtube.com/watch?v=EeJnNaiMy3U&t=201s

광고 링크 : 플랫폼공작소플랫폼공작소TV쇼핑몰



0 Comments
댓글쓰기 폼