DTO (Data Transfer Object)
DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, 로직을 가지지 않는 순수한 데이터 객체이다.
- getter/setter 정도의 메서드만 갖는다.
- DB에서 데이터를 얻은 뒤 Service나 Controller 등으로 보낼 때 사용한다.
- 데이터를 담는 그릇의 역할을 한다.
- 엔티티를 DTO 형태로 변환한 뒤 사용한다.
VO (Value Object)
VO는 DTO와 달리 Read-Only 속성을 지닌 값 오브젝트이다. DTO와 달리 getter의 메서드만 갖고 있어 수정이 불가능하다.
- 데이터 값 자체를 표현하기 위한 객체이다.
- 속성값이 모두 같으면, 같은 객체이다.
-> equals()와 hashCode() 두 메서드를 모두 오버라이딩하여 비교하여 둘 다 같다면 같은 객체로 처리한다.
- setter 메서드를 가질 수 없고, 오직 생성자를 통해서만 값을 초기화해야 한다.
- getter 이외에 다른 로직이 포함된 메서드를 가질 수 있다. (setter는 당연히 안 됨)
참고 : https://dkswnkk.tistory.com/500