Entity
실제 DB table과 1:1 mapping 되는 Class
- Domain Logic만 가지며 Presentation Logic을 가지고 있어서는 안된다.
- Spring 3 Tier인 Persistence, Buseniss, Presentation Tier 중 Persistence Tier에서 사용
- Setter 지양. 객체의 일관성. 변경되게 되면 다른 Class에 영향(실제 테이블과 매핑되기 때문)
DTO(Data Transfer Object)
계층 간 데이터 교환을 위한 객체
- getter, setter 메소드만 갖는다. 다른 로직은 없다.
- DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것
- View와 통신하며 자주 변경 됨
- Controller Layer(ViewLayer)에서 Response DTO 형태로 Client에 전달한다.
Entity와 DTO 분리 이유
- DB layer와 VIew layer 사이 역할 분리
- DB Layer = Persistence Tier, View Layer = Presentation Tier
- Entity는 실제 테이블과 매핑되어 만일 변경되게 되면 여러 다른 Class에 영향
- DTO는 View와 통신하며 자주 변경되므로 분리
VO(Value Object)
값 그 자체를 표현한 객체
- 값 불변 객체. setter X. 생성자만으로 값 초기화
- 값이 변하지 않음을 보장하여 코드의 안정성과 생산성을 높임
- getter, setter 이외 로직 포함 가능(DTO와 차이)
- equals()와 hashcode()를 오버라이딩
VO 예제
@Getter
class Money {
private final int value;
public Money(int value){
this.value=value;
}
//getter, setter 외 로직 포함 가능
public int getHalfValue(){
return value/2;
}
private Long id;
private String title;
private String contents;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Money)){
return false;
}
Money money= (Money) o;
return value== money.value;
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
VO와 DTO 차이점
- 공통점: Data을 전달
- VO는 동일한 객체 비교 필요한 Logic에 주로 사용
- DTO는 Layer간의 단순 통신 용도로 오고가는 Data 전달 객체
참고
'Programming > Spring' 카테고리의 다른 글
MapStruct & Lombok 적용 (0) | 2022.05.04 |
---|---|
@JsonProperty, @JsonNaming (0) | 2022.04.29 |
REST API (0) | 2022.01.25 |
Spring Security: Authentication (0) | 2022.01.21 |
The Custom Authentication Success Handle (0) | 2022.01.20 |