새소식

[5분 내로] 강의실/📋 Spring Annotation이란?

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

728x90

안녕하세요. 팀드모네입니다.

지난 시간에 이어서 스프링 어노테이션에 관한 포스팅을 작성하겠습니다.

 

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

광고 링크 : 팀드모네Youtube

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.