Back-End/SPRING

목적에 따른 객체 구분(DTO, VO, ENTITY)

R루안 2024. 7. 20. 16:57

개발을 하면서 맨날 헷갈렸던 부분을 개인적인 생각으로 정리를 해볼려고 합니다.

 

DTO(Data Transfer Object) : 데이터 전송 객체로써 프로세스간에 데이터를 전달하는 객체

VO(Value Object) : 고유한 식별자가 없는 객체

Entity : 데이터베이스 테이블과 1:1로 매핑되는 객체

 

차이점 요약 

1. DTO(Data Transfer Object) : 데이터 전달용

> 계층간 데이터 전달을 위해 사용한다.

> 필드값이 같아도 같은 객체로 판단 X

> 가변 가능 객체(setter 사용가능)

> getter/setter이외의 로직 사용 불가

 

2. VO(Value Object) : 속성 대신 사용, 가끔 데이터 전달

> 도메인에서 속성들을 묶어서 특정값을 나타낼 때 사용.

> '값'을 표현하기 위해 사용한다.

> 필드값이 같으면 같은 객체로 판단.

> 불변객체(setter 사용안함)

> 로직 사용 가능

> 불변값이기 때문에 DTO 대신 데이터전달을 위해 사용하기도 함

 

3. Entity : 데이터 베이스 객체

> 데이터 베이스 테이블과 직접 매칭

> 데이터베이스와의 CRUD 연산을 담당

> 주로 JPA나 Hibernate와 함께 사용한다.

 

 

프로젝트에서의 활용법

- 주소나 불변객체의 경우 Vo로 만들어서 Dto, Entity 안에 속성으로 처리하고 API 결과 반환은 DTO 객체,  데이터베이스 조회 객체는 Entitiy를 사용하면 될 것 같다.

 

개인적인 생각을 정리한 내용이라 틀린 내용이있으면 댓글 달아주시면 감사하겠습니다.