DTO, VO, Entity는 Spring 공부하면서 많이 봐왔고 자주 쓰지만 각각 어떤기능과 특징을 가지고 있는지 지식을 정리하는 차원에서 글을 쓰게 되었는데 자료를 찾아본 결과 내가 아는 내용이 대부분 이었지만 모르는 부분도 있어서 좋은 기회라고 생각한다.
DTO (Data Transfer Object)
- 데이터를 전달하기위한 객체이다.
- getter / setter가 존재하기 때문에 객체의 값을 읽거나 쓰는 기능이 있다.
- controller, service, repository 모든 부분에서 쓰일 수 있다.
- DTO는 보통 가변객체로 사용하지만 상황 따라 불변객체로 사용이 가능하다.
- 가변DTO는 비즈니스 로직을 포함을 안하고 불변DTO는 비즈니스 로직이 포함 가능하다.
VO (Value Object)
- VO는 순수히 값을 읽기 용도만 가능한 객체이다.
- DTO와 다른점이 있다면 setter가 없다.
- controller, service, repository 모든 부분에서 쓰일 수 있다.
- 명시적으로는 VO는 값을 넣을 수 없다고는 하지만 VO에도 값을 넣을 수는 있다.
- 비즈니스 로직 포함이 가능하다.
Entity
- 실제 DB Table과 매핑이 되는 객체이다.
- Entity를 선언하면 실행 할 때 Entity에 작성한대로 테이블이 자동으로 생성되고, 컬럼이 변경되기도 한다.
- 주로 service, repository에서 많이 사용된다.
- 사용할 때 주의할 점은 Entity를 데이터를 입력할 때 사용하면 안된다.
- 객체안에 비즈니스 로직을 포함이 가능하고 setter를 포함할 수도 있다.
최종정리
결과적으로 VO, DTO, Entity를 간단하게 정리하면 아래의 표가 되겠다.
| 설명 | getter / setter 여부 | 비즈니스 로직 포함 여부 |
---|
가변 DTO (Data Transfer Object) | 데이터를 읽기 혹은 쓰기를 위한 객체 | getter / setter 모두 가능 | X |
불변 DTO (Data Transfer Object) | 데이터를 읽기만을 위한 객체 | getter만 가능 | O |
VO (Value Object) | 데이터를 읽기만을 위한 객체 | getter만 가능 | O |
Entity | 데이터베이스의 테이블과 매핑되는 객체 | getter / setter 모두 가능 | O |
참고 게시글
https://ccomccomhan.tistory.com/35