setter
, getter
로 이루어져 있음비즈니스 로직을 포함
getter
메소드를 가질수는 있지만, setter
메소드를 가지지않음. 생성자를 통해서만 setequals
, hashCode
를 오버라이딩해야함💡DTO와 VO의 공통점
- 레이어 간 데이터를 전달할 때 사용 가능(VO는 불변을 보장하기 때문에 데이터 전달 용도로 사용 가능)
💡DTO와 VO의 차이점
- DTO
- 값이 변할 수 있음
- 레이어 & 레이어 사이에서 사용
- DTO dto1(1) != DTO dto2(1)
- 데이터 접근 이외의 기능을 가지지 않음
- VO
- 값이 변하지 않음
- 모든 레이어에서 사용 가능
- VO vo1(1) == Vo vo2(1)
- 비즈니스 로직 존재
public class CarVO{
private final String color;
public CarVO(String color){
this.color = color;
}
}
final String color = "red";
CarVO car1 = new CarVO(color);
CarVO car2 = new CarVO(color);
Entity
는 실제 DB 테이블과 매핑되는 핵심 클래스(SPA에서 사용)Entity
를 요청이나 응답값을 전달하는 클래스로 사용해서는 안됨Entity
는 id
로 구분
❓❔ 회사에서 사용중인 VO를 확인해봤는데 setter, getter를 함수가 존재하고, 로직도 존재하고, implements serializable
도 존재,,, DTO일까 VO일까,,,?
[출처] https://tecoble.techcourse.co.kr/post/2021-05-16-dto-vs-vo-vs-entity/
https://youtu.be/EeJnNaiMy3U