티스토리 뷰
● DTO(Data Transfer Object)
→"계층 간 데이터 교환을 위한 객체"
▶ 로직을 가지지 않고 setter/getter 메소드만 가진 순수 데이터 객체 클래스
DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용

Controller <-> Service <-> Repository 간 데이터 전달에 사용
DTO는 setter가 있어 값 변경이 가능
● VO(Value Object)
→"변경 불가능하며 오직 읽기만 가능"
▶ DTO는 setter를 가지고 있어 값을 변경할 수 있지만, VO는 getter만을 가지기 때문에 읽기만 가능하고 수정은 불가

VO는 필드가 final이고 setter가 없음 > 변경 불가능
equals(), hashcode()를 오버라이드(재정의)해 객체의 동등성 비교
(그냥 private만 있어도 VO만들 순 있음.
벗, VO에서 불변성을 보장하는 것이 중요
VO는 값 자체를 의미하는 객체이므로, 한 번 생성되면 값이 변경되지 않아야 함.)
|
구분
|
DTO
|
VO
|
|
목적
|
데이터 전송
|
값 자체를 표현
|
|
변경 가능성
|
변경 가능(setter O)
|
변경 불가능(final 필드)
|
|
동등성 비교
|
참조(주소) 비교
|
값 비교(equals() )
|
|
로직 포함 여부
|
X(로직 없음)
|
o(로직 포함 가능)
|
|
사용 사례
|
Controller <-> Service <-> Repository
|
엔티티 내 불변 값 표현
|
DTO : 데이터를 계층 간 전송하는 객체
VO : 값 자체를 의미하는 불변 객체
'spring boot' 카테고리의 다른 글
| [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기)[출처] [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기) (0) | 2026.04.12 |
|---|---|
| [Java] 세션, 쿠키 (0) | 2026.04.12 |
| [JAVA] 큐 , 데큐 (0) | 2026.04.12 |
| [springBoot] mybatis 세팅하기 (0) | 2026.04.12 |
| [spring boot]MyBatis<parameterType, resultType> (0) | 2026.04.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring
- bcrypt
- DTO
- springbootcss
- 크롤링연습
- 기상청api
- LIFO
- Vo
- 날씨불러오기
- 비밀번호암호화
- mybatis
- char
- 세션
- cookie
- 오래된이용자
- deque
- 비동기식
- parameterType
- 셀레니움
- AJAX
- 차이점
- java
- 스케줄러
- springboot
- varchar
- ajax로그인
- ResultType
- 데이터타입
- FIFO
- 회원상태
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함