문제는 본질이다.
본질적인 것이 변화되지 않는 한 나머지 잡다한
것 들은 달라지더라도 단지 외양만 바꾼 것일 뿐이다.
언제쓰는지는 알게 되었으나 왜 쓰는지가 궁금해져서 알아보게 되었다.
DTO?
프로세스 간에 데이터를 전달하는 객체
"리펙토링"의 저자 마틴 파울러가 DTO를 어떻게 정의했는지 참고하면,
우리가 원격 인터페이스로 작업을 할 때, 호출에 따른 비용은 매우 비싸다.
그렇기 때문에 우리는 요청의 횟수를 줄여야 하고, 이를 위해 한번의 요청에 더 많은 데이터를 전송해야 한다.
우리는 이를 수행하기 위해 많은 매개변수를 사용할 수 있다.
그러나 이것은 프로그래밍하기 어려운 방법일 뿐더러,
JAVA에서는 반환값으로 여러 개의 값을 받을 수 없으므로 더욱 불가능한 일이라 할 수 있다.
그렇기 때문에, 우리는 요청에 대한 모든 데이터를 보관할 수 있는 데이터 전송 객체, DTO를 만들어 사용한다
로버트 C.마틴은 "클린 코드"에서 DTO에 대해 다음과 같이 말한다.
자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스이다.
이러한 자료 구조체를 때로는 자료 전달 객체(DTO)라고 한다.
DTO는 굉장히 유용한 구조체다.
특히 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하다
-외부와 통신하는 프로그램에 있어 호출은 큰 비용이며,더욱 효율적으로 값을 전달할 필요가 있다
- 이를 위해 데이터를 모아서 전달하는 방법이 고안된 것이 DTO이다.
DTO를 써야하는 이유
Entity가 아닌 DTO를 전달함으로써 각 레이어 간 역할을 분리할 수 있기 때문
그렇다면 왜 VO와 DTO를 사람들이 헷갈려하는걸까?
우선 간단하게 특징들을 보자면
VO
- 값이 불변한다.즉,값을 설정한 뒤에는 수정이 불가하다
- 값이 같다면 동일성을 보장한다. equals&Hash code메소드를 재정의 해야한다.
DTO
- 내부의 값이 모두 같은 두 객체가 존재해도 서로 동일하다고 판단하지 않는다.
- 값을 수정할 수 있다.
결론적으로 이 둘을 혼동하는 이유는
DTO는 Entity처럼 상태가 바뀌는 것이 아닌 값을 전달하는데 주목적이 있고
그렇기에 불변의 값을 전달할 때 사용되는 VO와 혼동된 것이라고 본다.
참고 자료 :
https://kafcamus.tistory.com/13
'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글
[개념쌓기] 연관관계 매핑 (0) | 2022.08.10 |
---|---|
[개념쌓기] 쿠키? 세션? (0) | 2022.08.09 |
[개념쌓기]ORM? (0) | 2022.08.07 |
[개념쌓기] DI?IOC? (0) | 2022.08.07 |
[개념쌓기] REST API? RESTFUL API? (0) | 2022.08.03 |
댓글