안녕하세요. 팀드모네입니다.
지난 시간에 이어서 스프링 어노테이션에 관한 포스팅을 작성하겠습니다.
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