not bad 한 개발

[Spring] DTO, VO, Entity 특징 및 차이점 본문

Web/Spring

[Spring] DTO, VO, Entity 특징 및 차이점

leebean 2024. 10. 27. 14:42

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 모두 가능 비즈니스 로직 포함이 필요없다.
불변 DTO (Data Transfer Object) 데이터를 읽기만을 위한 객체 getter만 가능 비즈니스 로직 포함이가능하다.
VO (Value Object) 데이터를 읽기만을 위한 객체 getter만 가능 비즈니스 로직 포함이가능하다.
Entity 데이터베이스의 테이블과 매핑되는 객체 getter / setter 모두 가능 비즈니스 로직 포함이가능하다.

 

참고 게시글

https://ccomccomhan.tistory.com/35

 

[JAVA] - DAO, DTO, VO, Entity 간단하고 쉽게 이해하기

👨🏻‍🏫 간단정리 DAO : Database에 접근하는 역할을 하는 객체. DTO : 데이터를 전달하기 위한 객체 VO : 값 자체를 표현하는 객체. Entity : 실제 DB 테이블과 매핑이 되는 클래스. 👀 자세한 내용은

ccomccomhan.tistory.com

 

Comments