본문 바로가기

etc/Concept

DTO란?

반응형

안녕하세요. 오늘은 공부하던 도중에 DTO( or VO)에 대해 궁금해 공부를 해보았습니다.


바로 공부한 내용을 써보겠습니다!!!




1. DTO란 Data Transfer Object로서, VO(Value Object)와 비슷한 의미로 사용이 됩니다.


설명은 계층간 데이터 교환을 위한 java beans 라고 하는데, 이 의미는 정확히 모르겠습니다.


1. Data를 Object로 변환하는 객체이며, DTO에서 Object는 우리가 만드는 DTO class라고 생각

2. Data가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체

3. Database record의 data를 mapping 하기 위한 data object를 말한다. DTO는 보통 로직을 가지고 있지 않고, 

data와 그 data에 접근을 위한 getter/setter만 가지고 있다. 


라고 말합니다.


즉, Database에서 data를 얻어 service나 controller 등으로 보낼 때 사용하는 객체를 말합니다. 


쉽게 설명을 못하겠네요....


예를 들어볼게요...


public class DTO_test implements Serializable{
    private String name;
    private int value;
    private String data;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

이겁니다! 이해 가시나요? 이걸 DTO라고 합니다!!!!!!!! 

(이해가 아직 덜됐나봐요 쉽게 설명이 안나오네요....제가 이해한건 서버에서 데이터를 받아올 때, 해당 key값에 대한 value를 담을 집합, 

"데이터를 주고 받을 포맷" 이라고 생각했는데, 이게 맞는지 잘 모르겠네요!ㅎㅎ)


위 클래스에서 Serializable 을 상속한 이유는 데이터 전송 시 조각 단위로 보내지 않고 하나의 객체로 보내 위함입니다.


이러한 DTO를 사용한 이유는, Key&Value로 존재하는 data를 자동화 처리된 DTO로 변환되어 손 쉽게 셋팅된 object를 받아서 사용하기 위함입니다.


서버 연동시 client쪽의 쓸데없는 코드량을 줄이며, 한번에 보고 편하고 수정하기도 편하게 만들기 위해 사용했다고 생각하시면 될 것 같네요!



----------------------------------

2. VO(Value Object)


vo는 말 그대로 값을 위해 쓰는 것입니다.


java는 value type 을 표현하기 위해 불변 클래스를 만들어 사용합니다. 


* 불변 클래스란 readOnly 속성을 가지며, 중간에 값을 바꿀 수 없어 새로 만들어야만 하는 것들을 말합니다. 예를 들어, 

Color class는 Red 표현 시 Color.RED라고 값을 표현하지, 이를 내 마음대로 바꿀 수는 없습니다. 이를 불변클래스라 합니다.


-------------------------------------

DTO 와 VO는 DB or 어떠한 물체 틀을 잡기 위한 변수들을 모아둔 것이나, 차이점은

VO는 readOnly 속성만 가지지만, DTO는 write / read 의 속성 모두 갖습니다.


즉, 두 가지를 혼용해서 쓰는 이유는, 두 가지 모두 직접 데이터를 넣어주기 보다는 넣어진 데이터를 getter를 통해 사용하기 때문입니다.

하지만, DTO는 불변클래스가 아니며, VO는 불변클래스입니다.



--------------------------------------이렇게 공부를 해봤는데요, 제가 이해를 잘 못한 부분이나 틀린 부분은 지적해주시면 감사히 달게달게 받겠습니다.




 * 참고
 * http://mommoo.tistory.com/61
 * http://sumin172.tistory.com/107
 * http://lazymankook.tistory.com/30

위의 블로그들을 참고해 공부해봤습니다!

반응형