본문 바로가기

개념 정리

DTO, VO 개념과 차이점

1. DTO 란?

  • 전송되는 데이터의 컨테이너(다른 시스템으로 전달하는 작업을 처리하는 객체)
  • DTO(Data Transfer Object)는 계층(Layer) 간 데이터 교환을 하기 위해 사용하는 객체 (Controlloer(Web Layer) -> Service(Service Layer ))
  • 로직을 가지지 않고 오직 getter / setter 메소드만 가진 순수한 데이터 객체
  • getter / setter로 프로퍼티를 표현 한다는 의미 -> setter 존재 시 가변, 비 존재 시 불변

2. VO 란?

  • 관계 데이터 베이스의 레코드에 대응되는 자바 클래스
  • VO(Value Object) 는 값을 위해 사용
  • read-Only (사용하는 도중에 변경 불가능하며 오직 읽기만 가능)
  • equals()로 객체의 모든 값 비교
  • getter / setter 외의 로직을 포함

3. DTO와 VO의 차이점

  • 외부 시스템과 데이터 통신의 경우 DTO를 사용(데이터 전달용)하고, DB에서 가져오는 데이터는 VO로 사용(값 표현용)
  • DTO는 setter를 가지고 있어 값이 변할 수 있지만, VO는 값이 변할 수 없음
  • DTO는 속성 값이 같다고 해서 같은 객체가 아님, VO는 속성 값이 같으면 같은 객체다 (밑 예제)
  • getter/setter 외의 로직을 가질 수 있는 지의 여부
// a!=b
DTO a = new DTO(1);

DTO b = new DTO(1);




// a==b
VO a = new VO(1);

VO b = new VO(1);