데이터 전송 객체(data transfer object, DTO[1][2])는 프로세스 간에 데이터를 전달하는 객체이다. 프로세스 간 통신이 일반적으로 원격 인터페이스(예: 웹 서비스)로 재정렬하면서 이루어지게 되는데 여기에서 각 호출의 비용이 많다는 점을 동기로 하여 이용하게 된다.[2] 각 호출의 비용이 큰 것이 클라이언트와 서버 간 왕복 시간과 관련되기 때문에 호출의 수를 줄이기 위해 여러 호출에 의해 전송되는 데이터를 축적하면서 오직 하나의 호출만으로 서비스되는 객체인 DTO를 사용하는 것이다.[2]
데이터 전송 객체와 비즈니스 객체, 데이터 접근 객체 간 차이는 DTO의 경우 스토리지, 그리고 자체 데이터(뮤테이터와 접근자)의 조회를 제외하고 어떠한 동작도 하지 않는다는 점이다. DTO는 테스트에 필요한 어떠한 비즈니스 로직도 포함하지 않아도 되는 단순한 객체이다.[1] 다시 말해 DTO는 비즈니스 로직을 포함할 필요가 없는 단순한 객체이지만 유선상 데이터 전송을 위해 직렬화와 역직렬화 매커니즘을 포함할 수 있다.
용어
값 객체(value object)는 DTO가 아니다. 두 용어는 과거에 자바 개발자들에 의해 병합되고 있다.[2]