728x90
반응형
근데 진짜 DTO랑 VO이거 개발할때 잘 구분 안함...
DTO
Data Transfer Object
데이터를 전달하기 위해 사용하는 객체이다.
데이터를 주고받을 때에 사용하는 녀석이라 생각하면 편하다.
구체적으로 표현하자면 "계층 간" 데이터 전달을 위해 사용되는 것이 DTO이다.
예를 들어 Controller
<-> Service
와 같이 서로 다른 계층 간에 데이터를 전달할 때에 쓰인다.
이 DTO의 특징으로는
- 오직 getter/setter메서드만을 가진다.
- 찐으로 getter/setter만 갖는게 아니라 데이터 세팅이랑 읽는것만 가능하다는거다.
- setter는 어지간하면 쓰지 말자구요
- 걍 불변객체 가자
- setter는 어지간하면 쓰지 말자구요
- 찐으로 getter/setter만 갖는게 아니라 데이터 세팅이랑 읽는것만 가능하다는거다.
- 로직을 갖지 않는다.
왜냐면 얘는 데이터 전달만을 위한 객체이기 때문이다.
VO
Value Object
VO는 DTO와 달리
- 무조건 불변!
- 로직을 포함할 수 있다.
그리고 이거 VO는 equals
랑 hashCode
메서드를 모두 오버라이딩 해줘야 한다.
왜냐면 VO는 이름에서 볼 수 있듯 Value를 가지는데 이 value즉 속성값만으로 비교하도록 해야하기 때문이다.
결론
근데 사실 여기서 둘다 불변객체로 표현하도록 하자.
그리고 중요한것은 DTO는 속성값이 같다고 같은 객체가 아니지만 VO는 속성값이 같으면 같은 객체라는 것이다!!
DTO를 통해 데이터를 전달하기 때문에, 여기서는 값 전달을 위한 세팅/읽기 외에 다른 로직은 사용되지 않는다.
그리고 애초에 이거를 비교할 이유도 없음
VO의 경우는 그냥 값을 표현하기 위해 사용된다. (값 타입이라 생각하면 될듯하다)
그래서 별도의 로직이 들어갈 수 있다.
또한 얘는 값을 표현하기 위한 객체라서 이 값이 동일하면 동일한 객체라고 생각하면 된다.
반응형