본문 바로가기

Java/기술 스터디

DTO & VO

목차

    DTO

    DTO는 데이터 전송 객체의 약자로,
    계층 간 데이터 교환을 위해 사용하는 객체를 말합니다.


    그림으로 표현하면 이렇습니다.

    각 계층 간 데이터 교환이 필요할 때 DTO를 사용합니다.

     

     

    getter/setter 메서드

    순수하게 데이터를 담아 전달하고 받아서 꺼내는게 목적이기 때문에 Getter / Setter 외의 비즈니스 로직은 가지고 있지 않습니다.


    메서드로는 Getter / Setter만을 갖는데,

    Get 메서드는 담겨진 값을 꺼낼 때 사용하고,

    Set 메서드는 값을 담아서 전달할 때 사용합니다.

     

     

    set 메서드

    set 메서드는 값을 담을 때 사용하기 때문에 데이터를 전달하는 과정에서 값의 변조 가능성이 있습니다.

    그렇기 때문에 왼쪽처럼 생성자로 값을 넣어주면 데이터 전달 과정에서 변조가 불가능합니다.

     

     

     

    VO

    VO는 값을 저장하고 관리하는 객체를 말합니다.
    비즈니스 로직은 갖고 있지 않는 DTO와는 반대로 VO는 로직을 포함할 수 있습니다.

     

     

    메서드

    VO는 값 그 자체를 나타내기 때문에,
    setter와 같이 변조 가능성이 있는 메서드가 존재하면 안 됩니다.

     

     

    그리고 DTO는 서로 다른 이름을 갖는 DTO 인스턴스는 다른 객체이지만,
    VO는 서로 다른 이름을 갖는 VO 인스턴스라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체인 것이 핵심입니다.

     

     

     

    정리

    마무리로,

     

    DTO는 계층 간 데이터를 전송하기 위한 객체로, Setter를 사용하여 값을 담고, Getter를 사용하여 값을 꺼내 씁니다.

    이때 값이 변하는 것을 막고 싶다면 생성자를 이용하여 불변 객체로 만들면 됩니다.

    DTO는 데이터 전달을 목적으로 하기 때문에 Getter / Setter 이외의 비즈니스 로직이 필요하지 않습니다.

     

     

     


    참고 자료

    DTO와 VO 개념
    https://maenco.tistory.com/entry/Java-DTO%EC%99%80-VO%EC%9D%98-%EC%B0%A8%EC%9D%B4VO

    개념
    https://tecoble.techcourse.co.kr/post/2020-06-11-value-object/

    DTO와 VO 차이
    https://velog.io/@taehee-kim-dev/DTO-vs-VO

     

    'Java > 기술 스터디' 카테고리의 다른 글

    REDIS란?  (0) 2023.12.04
    OSI 7계층  (0) 2023.10.16
    ENUM  (0) 2023.09.17
    Cookie & Session  (0) 2023.08.14
    HTTP & HTTPS  (0) 2023.08.14