[스프링 부트 개념] VO(Value Object)와 DTO(Data Transfer Object의 차이

2021. 4. 10. 00:55 Spring Framework/Spring Boot 개념
1. VO와 DTO의 현재 상황
2. VO란 무엇인가
3. DTO란 무엇인가
4. VO와 DTO의 사용방법

1. VO와 DTO의 현재 상황

현재 필자를 포함한 일부 개발자는 VO와 DTO의 정확한 개념 구분이 안되는 경우가 많다.

필자 역시 VO와 DTO를 동일한 개념으로 생각하고 지냈었으며,

VO를 마치 DTO와 같이 사용했었다.

 

이는 아마 일부 또는 많은 개발자가 그렇게 사용하고 있다는 생각이 든다.

필자가 봐았던 일부 국내 스프링 서적 역시 VO를 DTO로 사용하고 있었기 때문에 이 기회에 VO와 DTO에 대해 알아보고 정확하게 쓰고자 이 포스팅을 작성하게 되었다.

2. VO란 무엇인가

VO(Value Object)란 (Value Object)의 약자로 값 객체를 의미한다.

오직 read만 가능하며 Getter만 가능해야 한다.

 

DTO(Data Transfer Object)와 달리 데이터 이전이 아닌 그저 단순히 저장된 값을 의미한다.

그렇기 때문에 데이터 불변 조건이 성립되어야 하므로 Setter 존재하면 안된다.

 

그럼 어떠한 경우에 사용하여야 할까?

- 데이터 불변이어야하고

- 저장된 값을 불러와야하는 경우

 

위와 같은 상황일 떄 사용하면된다.

그럼 그러한 상황은 어떤 경우인지 알아보도록하자.

 

예를 들어 서울의 지역번호를 저장하고자한다.

서울의 지역번호는 누구나 다 알듯이 02이다.

그리고 핸드폰 번호처럼 변하는게 아닌 고정된 값이다.

그렇기 때문에 위와 같이 고정된 값은 VO로 저장 후 Getter 호출 할수 있다.

 

다만, Setter를 사용하여 값을 수정하면 안된다는 것이다.

위와 같이 고정된 값을 사용하고 호출할 때는 VO를 사용해야한다.

 

3. DTO란 무엇인가

자 이제, VO를 알아봤으니 DTO를 알아보도록하자.

DTO(Data Transfer Object)란 영어 의미 그대로 데이터 이전 객체이다.

그렇기 때문에 Getter 뿐만 아니라 Setter를 사용하여 Data 이전을 할 수가 있다.

 

예를 들어 회원정보 객체를 만들 경우에는 DTO로 명시해야한다.

회원의 정보(이름, 휴대폰 번호, 주소 등)은 언제든지 변할 수 있기 때문에

불변의 조건이 있으면 안된다.

 

그렇기 때문에 Getter와 Setter 둘다 사용하여 데이터 이전이 가능하도록 구성해야 한다.

그리고 위와 같은 기능을 담당하는 객체이기 때문에 우리는 DTO로 명시하여야 한다.

 

4. VO와 DTO의 사용방법

지금까지 VO와 DTO에 대한 차이에 대하여 설명하였다.

그렇기 때문에 앞으로는 더 이상 VO를 DTO와 같이 사용하지말고 VO 기능 그대로 사용하고

DTO 역시 DTO 기능 그대로 사용하는 코더가 되도록하자.

 

출처 : namubada.net/376?category=781471