DTO (Data Transfer Object, 데이터 전송 객체)
- 계층 간 데이터 교환을 위해 사용하는 객체
- 로직을 갖고 있지 않은 순수한 데이터 객체
- getter/setter 메서드만을 갖는다.
- 가변 객체 (생성 후 상태 변경 가능)
VO (Value Object, 값 객체)
- 값 그 자체를 표현하는 객체
→ 서로 다른 이름을 가진 VO 인스턴스의 모든 속성 값이 같다면 같은 객체이다
(전제 조건: equals와 hashcode 오버라이딩)
- 객체의 불변성 보장
- 로직 포함 가능
Entity
- 실제 DB 테이블과 매핑되는 클래스
- Id로 구분
- 로직 포함 가능
- 가변 객체
Tips
- DTO를 VO와 같은 불변 객체로 사용하면 DTO가 전송하고자 하는 데이터가 전송 과정 중에 변조되지 않음을 보장할 수 있다.
- View의 속성값 변경으로부터 Entity의 순수성을 보호하기 위해서는 DTO와 Entity 클래스를 분리하는 것이 좋다.
Source