Programming/Spring

Entity, DTO, VO 차이

사랑우주인 2022. 2. 4. 17:46

 

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 전달 객체


참고

Entity, DTO, VO 바로 알기