본문 바로가기
[ Concept ]

[ Concept ] DTO와 VO의 차이점

by 환이s 2023. 6. 22.
728x90


개발을 하던 도중 데이터를 위한 객체를 만들다 보면 항상 DTO와 VO를 혼용해서 쓰기도 하는데, 문득 DTO와 VO의 차이에 대해 포스팅을 해야겠다고 생각해서 글을 써봅니다.

 

DTO란?

 

우선 DTO란? Data Transfer Object의 약자로 순수하게 데이터를 담아 계층 간으로 전달하는 객체입니다.

 

 

DTO의 특징은 다음과 같습니다.

 

  • 데이터 전송을 위해 사용되는 객체입니다.

 

  • 비즈니스 계층과 프레젠테이션 계층 간의 데이터 교환을 위해 설계됩니다.

 

  • 데이터 전송을 위한 순수한 데이터 객체로, 주로 읽기 전용 필드와 해당 필드에 접근하기 위한 getter 메서드를 가지고 있습니다.

 

  • DTO는 도메인 객체나 엔티티 객체의 데이터를 비즈니스 계층에서 프레젠테이션 계층으로 전달하거나 반대로 전달할 때 사용됩니다.

 

  • DTO는 데이터 전송의 목적에 초점을 맞추고, 데이터의 표현과 전송을 위한 필드를 포함합니다.

 

 

예를 들면, 물건의 가격과 수량을 나타내는 예제를 통해서 알아보자면

 

public class ProductDTO {
    private String name;
    private double price;
    private int quantity;

    // 생성자, getter, setter 등 필요한 메서드들
}

 

'ProductDTO'는 데이터 전송을 위해 사용되는 객체로, 물건의 이름, 가격 및 수량을 저장하는 역할을 합니다.

 

'ProductDTO'는 데이터 전송을 위한 순수한 데이터 객체로서 필드와 해당 필드에 접근하기 위한 getter와 setter 메서드를 가지고 있습니다.

 

따라서 'ProductDTO'는 물건의 이름, 가격 및 수량을 전달하는 즉, 데이터 전송을 표현하는 데 사용할 수 있습니다.

 


VO란?

 

VO는 Value Object의 약자로 값 그 자체를 나타내는 객체입니다. 

 

DTO와 반대로 로직을 포함할 수 있으며, VO의 경우 특정 값 자체를 표현하기 때문에 불변성의 보장을 위해 생성자를 사용해야 합니다.

 

VO의 특징은 다음과 같습니다.

 

  • 값의 조합으로 식별되는 객체입니다.

 

  • 비즈니스 도메인에서 사용되며 불변성과 값의 동등성에 중점을 둡니다.

 

  • VO는 읽기 전용 필드와 해당 필드에 접근하기 위한 getter 메서드를 가지고 있습니다.

 

  • VO는 주로 비즈니스 규칙에 따라 조합된 값들을 나타냅니다. 예를 들어, 주문의 주소 정보를 표현하기 위해 여러 필드(도시, 우편번호, 거리 등)를 조합한 VO를 사용할 수 있습니다.

 

  • VO는 도메인 객체의 속성을 묶어서 표현하고, 도메인 객체 간의 동등성 비교나 불변성을 유지하기 위해 사용됩니다.

 

 

예제로는 DTO와 동일하게 물건의 가격과 수량을 나타내는 예제로 알아봅니다.

 

public class PriceVO {
    private double price;
    private Currency currency;

    // 생성자, getter, setter 등 필요한 메서드들
}

public class QuantityVO {
    private int quantity;
    private Unit unit;

    // 생성자, getter, setter 등 필요한 메서드들
}

 

'PriceVO'와 'QuantityVO'는 값의 조합으로 식별되는 객체로 사용됩니다. 'PriceVO'는 가격과 통화를 조합한 값으로,

'QuantityVO'는 수량과 단위를 조합한 값으로 나타냅니다.

 

이러한 값 객체들은 비즈니스 도메인에서 사용되며 불변성과 값의 동등성에 중점을 둡니다.

따라서 필드들은 읽기 전용이며, 해당 필드에 접근하기 위한 getter 메서드를 제공합니다.

 


정리하자면

 

결론적으로, 'ProductDTO'는 물건의 이름, 가격 및 수량을 전달하고,

'PriceVO'와 'QuantityVO'는 각각 가격과 수량을 조합한 값을 나타냅니다.

 

이렇게 DTO와 VO를 활용하여 데이터 전송과 비즈니스 도메인의 값을 표현하는 데 사용할 수 있습니다.

 


마치며

 

오늘은 기초 개념인 DTO와 VO의 차이점에 대해서 알아봤습니다.

다음 포스팅에서 뵙겠습니다.

 

728x90