728x90
반응형
Spring에서 Data를 전달하는 객체에는 대표적으로 DTO, VO가 있다,
DTO와 VO는 용도가 전혀 다르다.
DTO
Data Transfer Object로 계층간 데이터를 전달하기 위한 객체이다.
계층 사이에서 데이터를 전달하기 위해 DTO에 데이터를 담아 서로 주고 받는다.
- DTO는 순수하게 데이터 전달만을 위한 객체이다.
- 순수한 데이터 객체로 비즈니스로직을 갖지 않는다.
- 오직 getter/setter 메서드만 갖는다
Controller에서 Service로 데이터를 전달할 때,
여러개의 데이터를 하나의 DTO로 묶어 전달하면 유지보수도 쉽고 코드 가독성과 재사용성이 증가한다.
VO
Value Object로 값 그 자체를 표현하는 객체이다.
VO는 객체의 참조값이 다르더라도 값이 같다면 동일한 것으로 봐야한다.
- Read-Only 속성을 가진다.
- 값 자체를 표현하기 때문에 불변 객체여야한다.
- 불변성이 보장되어야 하기 때문에 setter 메서드가 포함되지 않는다.
- 비즈니스 로직이 포함될 수 있다.
- equals()와 hashCode() 메서드를 오버라이딩하여 사용해야한다.
VO는 데이터를 전달하지 않고 변하지 않는 값을 표현할 때 사용한다.
차이점 정리
개념 | 역할 | 주로 위치하는 계층 | 주요 특징 |
DTO | 데이터 전달 | Controller ↔ Service | 데이터만 저장, 로직 없음 |
DAO | 데이터베이스 접근 | Repository (DB) | DB CRUD 작업 수행 |
BO | 비즈니스 로직 | Service 계층 | 여러 DAO를 조합하여 처리 |
VO | 값 객체 | 도메인 모델 | 불변 객체, 값 비교 |
728x90
반응형
'Spring' 카테고리의 다른 글
Spring, 403 AccessDenied 오류(적용하지 않은 어노테이션이 적용됨) (0) | 2025.04.08 |
---|---|
Spring, Pageable/List 기본 정렬 기준 (0) | 2025.03.18 |
Spring, Service 자주 사용하는 어노테이션 정리 (0) | 2025.03.18 |
Spring, Lazy Loading 사용하는 방법 / 외래키로 연결된 테이블의 데이터 같이 가져오는 방법(JPA) (0) | 2025.03.18 |
Spring, Controller 어노테이션 정리 (0) | 2025.03.17 |