Spring - VO와 DTO의 차이

Value Object vs Data Transfer Object

Posted by Yan on August 6, 2021

DTO Data transfer Object

  • 전송되는 데이터의 컨테이너 (Java Beans)
  • DB의 데이터를 로직을 갖고 있지 않은 순수한 데이터 객체로 가져오는 것. getter, setter메소드만 가진다.
  • 데이터를 저장하여 사용하도록 한다
  • 같은 시스템에서 사용되는 것이 아닌 다른 시스템으로 전달하는 작업을 처리하는 객체다.
  • Layer간 통신 용도로 오가는 객체를 말하기도 한다.
  • controller layer에서 client에 response DTO형태로 전달된다.

VO Value Object

  • 데이터 그 자체로 의미있는 것을 담고있는 객체로 표현된다.
  • Read-Only 속성의 객체다. 값 변경이 없다.
  • 간단한 Entity를 의미하는 작은 객체를 의미한다
  • 관계데이터베이스 레코드에 대응되는 자바 클래스다
    • DB레코드를 구성하는 field들을 속성으로 하고,
      해당 변수에 접근할 수 잇는 Getter와 Setter 메소드 조합으로 클래스를 형성한다.
    • 거의 불변성을 가진다
    • equals()메소드로 비교할 때 객체의 모든 값을 비교해야 한다.
    • equals()와 hashcode()를 오버라이딩 한다.

데이터의 흐름

JSP`UI`
-> DTO를 param으로 전달
-> Class`service`
-> DTO를 param으로 전달
-> SQL`DBIO`
-> VO를 param으로 전달
-> `DB`


reference

VO vs DTO
Entity, DTO, VO 바로 알기