TypeScript(JavaScript)에서는 DTO만 사용했던 것 같은데 Java(또는 JVM-Lang)에서는 두 용어가 자주 나온다.
DTO는 Data Transfer Object의 줄임말로 단어 그대로 데이터를 전달할 때 사용하는 객체이다.
이 때 전달 대상은
•
브라우저(클라이언트)와 백엔드 서버가 될 수도 있고
•
백엔드 서버 내부의 API Controller와 비즈니스 서비스 로직이
될 수도 있다.
데이터 전달이 목적이기 때문에 추가적인 로직 없이 값만 담고 있는다.
public class CreateStudentDto {
private String name;
private int age;
public void setName(String name) { /* ... */ }
public void setAge(int age) { /* ... */ }
public String getName() { /* ... */ }
public int getAge() { /* ... */ }
}
Java
복사
VO는 Value Object의 줄임말로 값(Value)을 담고 있는 객체라는 뜻이다.
아래 예시와 같은 일반적인 도메인 객체를 말한다. 값과 함께 추가적인 로직도 담을 수 있다.
VO는 불변성(Immutable)을 보장해야되기 때문에 Setter를 두지 않고 처음 생성자를 통해 값을 초기화한다.
public class Student {
private String name;
private int age;
public Student(String name, int age) { /* ... */ }
public String getName() { /* ... */ }
public int getAge() { /* ... */ }
public void registerSubject() { /* ... */ }
}
Java
복사
정리하면 API 요청, 응답과 같이 데이터를 전달할 때는 DTO라는 용어를 사용하고,
값을 다룰 때(관리, 저장 등)에는 VO라는 용어를 사용한다.