728x90
반응형
DTO
Data Transfer Object (데이터 전송 객체)
계층(Layer)간 데이터 교환을 위해 사용하는 객체이다.
로직을 갖고 있지않은 순수한 데이터 객체이며, getter/setter 메소드만을 갖는다.
Client <-> Controller <-> Service <-> Respository
VO
Value Object(값 객체)
서로 다른 이름을 가진 VO의 인스턴스가 모든 속성 값이 같다면 같은 객체이다.
(-> 전제 조건 equals()와 hashCode()를 오버라이딩 했을때)
객체의 불변성을 보장한다.
로직을 포함할 수 있다.
Entity
실제 DB의 테이블과 매핑되는 클래스
Id로 구분되며 로직을 포함할 수 있다.
DTO와 VO를 같은 의미로 생각할 수 있다.
Entity를 DTO 대신 사용할 수는 있지만................but.....
View에서 표현하는 속성 값들이 요청에 따라 계속 달라질 수 있는데,
그 때마다 Entity의 속성값을 변경하면 영속성 모델을 표현한 Entity의 순수성이 모호해지기때문에
Controller에서 쓸 DTO와 Entity클래스는 분리하는게 좋다
Client <-DTO-> controller(web) - service - repository(DAO) <-domain(Entity)-> DB
DTO | VO | Entity | |
용도 | 레이어간의 데이터 전송 | 의미있는 값을 표현 | DB 테이블과 매핑되는 클래스 |
가변/불변 | 가변객체, 생성 후 상태 변경 가능 | 불변객체, 생성 후 상태 변경 불가 | 가변 객체, 생성 후 상태 변경 가능 |
로직 포함 여부 | 로직 포함 불가 | 로직 포함 가능 | 로직 포함 가능 |
참고 : https://www.youtube.com/watch?v=J_Dr6R0Ov8E&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=12
728x90
반응형
'Programming > Java' 카테고리의 다른 글
[JAVA] SessionTimeOut 설정 - 세션 시간 제어 (2) | 2021.02.02 |
---|---|
[JAVA] JVM(Java Virtual Machine) 자바 가상 머신 / Runtime Data Area (0) | 2020.08.15 |
[JAVA] 자바의 스트림(stream)과 파일 입출력 (0) | 2020.08.14 |
[Java / Spring ] 어노테이션(@, annotation)의 정의와 종류 (0) | 2020.08.12 |
[JAVA] 제네릭(Generic) (0) | 2020.08.02 |