상세 컨텐츠

본문 제목

DTO와 VO

Spring(프레임워크)

by 헬로제이콥 2025. 1. 16. 15:49

본문

DTO와 VO, 아주 쉽게 알아보기

DTO (Data Transfer Object) 와 VO (Value Object) 란 무엇일까요?

DTO(Data Transfer Object)VO(Value Object) 는 객체지향 프로그래밍에서 데이터를 담는 용도로 사용되는 객체입니다. 둘 다 비슷해 보이지만, 사용되는 목적과 특징이 조금 다릅니다.

간단히 말해,

  • DTO: 데이터를 한 곳에서 다른 곳으로 이동시키는 역할을 합니다. 마치 우체부가 편지를 배달하는 것처럼, 데이터를 안전하게 전달하는 통입니다.
  • VO: 특정한 값을 나타내는 객체입니다. 마치 '주소'라는 값 자체를 하나의 객체로 표현한 것처럼, 값 자체에 의미를 부여합니다.

좀 더 자세히 알아볼까요?

DTO

  • 주요 목적: 데이터베이스에서 조회한 데이터를 화면에 표시하거나, 다른 시스템으로 전송하기 위해 사용됩니다.
  • 특징:
    • 데이터베이스 테이블의 구조와 유사하게 설계되는 경우가 많습니다.
    • 불필요한 메소드를 포함하지 않고, 순수하게 데이터만 담습니다.
    • 가변적일 수 있으며, setter/getter 메소드를 통해 값을 변경할 수 있습니다.

VO

  • 주요 목적: 특정한 비즈니스 로직에서 사용되는 값을 표현합니다.
  • 특징:
    • 불변성을 가지는 경우가 많습니다. 즉, 한번 생성된 값은 변경되지 않습니다.
    • equals() 메소드를 오버라이드하여 값 비교를 수행합니다.
    • 비즈니스 로직에 따라 추가적인 메소드를 가질 수 있습니다.

예시를 통해 비교해 볼까요?

예시: 주문 정보

  • DTO: 주문 목록을 조회할 때 사용되는 주문 정보 DTO
    Java
     
    public class OrderDto {
        private Long orderId;
        private String customerName;
        private List<OrderItemDto> orderItems;
        // getter, setter
    }
    
  • VO: 주소 정보를 나타내는 주소 VO
    Java
     
    public class AddressVo {
        private String city;
        private String street;
        private String zipcode;
        // 생성자에서 값을 초기화하고, getter만 제공
    }
    

차이점:

  • OrderDto: 주문 정보를 화면에 표시하거나, 다른 시스템으로 전달하기 위한 목적으로 사용됩니다. 데이터베이스의 Order 테이블과 유사한 구조를 가지고 있습니다.
  • AddressVo: 주소라는 값 자체를 표현하며, 주문 정보에서 주소를 나타낼 때 사용됩니다. 불변성을 가지며, equals() 메소드를 오버라이드하여 두 주소가 같은지 비교할 수 있습니다.

왜 DTO와 VO를 사용할까요?

  • 코드 가독성 향상: 각 객체의 역할이 명확해져 코드를 이해하기 쉽습니다.
  • 유지보수성 향상: 데이터베이스 구조 변경 시 DTO만 수정하면 되므로 유지보수가 용이합니다.
  • 재사용성 증가: VO는 다양한 곳에서 재사용될 수 있습니다.
  • 안정성 향상: 불변성을 가진 VO는 예기치 않은 값 변경으로 인한 오류를 방지할 수 있습니다.

결론

DTO와 VO는 데이터를 다루는 방식에 따라 구분되는 개념입니다. 어떤 객체를 DTO로 만들고, 어떤 객체를 VO로 만들지는 개발 상황과 요구사항에 따라 달라질 수 있습니다.

핵심:

  • DTO: 데이터 전달, 가변적
  • VO: 값 표현, 불변성

 

'Spring(프레임워크)' 카테고리의 다른 글

스프링 구조도 및 파일 설명  (0) 2025.01.16
스프링과 MyBatis  (0) 2025.01.16
어노테이션? 레고 블록  (0) 2025.01.16
커넥션 풀이 뭐야? 레고 블록으로 알아보자  (0) 2025.01.16
API 서비스 운영  (0) 2025.01.16

관련글 더보기