반응형
先 요약
DTO | VO | Entity | |
용도 | 레이어 간 데이터 전달 | 값 자체 표현 | DB 테이블과 매핑되는 클래스 |
동등 결정 | 속성값이 모두 같다고 해서 같은 객체 X | 속성값이 모두 같으면 같은 객체 O | |
가변/불변 | setter - 존재시:가변 / 비존재시:불변 | 불변 | 가변 객체 생성 후 상태 변경 O |
로직 | getter/setter 외의 로직을 갖지 않음 | getter/setter외에도 다른 로직을 가질 수 있다. | 로직 포함O |
출처 : 우아한테크코스 인비 크루( https://www.youtube.com/watch?v=z5fUkck_RZM )
DTO(Data Transfer Oject)
: 데이터를 전달하기 위해 사용하는 객체
: 데이터를 담아서 전달하는 '바구니'
- getter/setter 메서드만을 갖는다!
- 다른 로직 X
예시
DTO(좌) --> CrewDto(우)에 값을 전달하는 역할
추가) DTO, Entity 분리
VO(Value Object)
: 값 그 자체를 표현하는 객체
고유번호가 같더라도 같은 만원인 경우도 있음!
- getter/setter 중 보통 getter의 기능만 포함, 위에서는 생성자로만 값을 받음!
- 이외의 로직 모두 가능!!
단 이경우, 속성값만으로 비교하지않기 때문에 equals와 hashCode 비교는 오류가 발생함.
=> 해결방법?
코드는 아래와 같이 오버라이딩 하면 된다.
위 과정을 통해 Money class를 완전한 VO로 만들어주었다.
반응형
'웹(Web) > 백엔드(Backend)' 카테고리의 다른 글
Spring 공통속성 JPA Auditing, EntityListener, MappedSupperclass (0) | 2022.02.18 |
---|---|
스프링MVC패턴 Controller / Model(DAO,DTO,Service) / View (0) | 2022.02.13 |
JPA와 SpringData JPA(Repository) (0) | 2022.01.27 |
스프링핵심원리 - 객체 지향 설계 원칙/프레임워크vs라이브러리/IoC/DI (0) | 2022.01.06 |
Intellij SpringBoot @Test Junit Run test using 설정 (0) | 2021.12.10 |