-
VO & DTO
VO( Value Object )
개념
Value Object는 DTO와 동일한 개념이나 차이점은 read only 속성을 갖는다.
Value Object는 관계 데이터 베이스의 레코드에 대응되는 자바 클래스이다.
형태는 db 레코드를 구성하는 필드들을 Value Object의 Attribute로 하고 해당 변수에 접근할 수 있는 Getter, Setter 메소드의 조합으로 클래스가 형성되어진 클래스이다.
특성은 대체로 불변성이고 equlas()로 비교할 때 객체의 모든 값을 비교해야 한다.
프로그램의 사용자가 화면에서 어떤 데이터를 입력하거나 조회 요청이 왔을 때 입력된 데이터나 조회하는 조건을 VO에 담아서 DAO에 요청하면 DAO는 저장소(일반적으로 Database )로부터 데이터를 입력하거나 조회한 후 그 결과를 돌려주게 된다.
VO는 간단한 독립체( Entity )를 의미하는 작은 객체를 의미한다.
VO의 같음은 그 정체성에 의해 결정되지 않는데, 그 뜻은 두 VO 들은 그 두 가지가 같은 값을 같고 있을 때 같은 것이지 같은 객체라고 해서 같지 않다는 것이다.
작기 때문에, 같은 독립체를 대변하는 복수의 같은 VO들이 존재할 수 있다. 가끔 하나의 인스턴스에 의존하고 그에 기반한 레퍼런스를 사용하기 보다는 새 객체를 생성하는 것이 더 간편하다.
필요성
Network traffic을 줄임으로 인해 효과적이다.
기대효과
Network traffic이 줄어든다.
장단점
장점은 비 서버 측 클라이언트도 네트워크 오버헤드 없이 영속성 데이터에 액세스 할 수 있다는 점이다.
데티어 전달을 위해 가장 효율적인 방법이지만, 클래스의 선언을 위해 많은 코드가 필요하다.
즉 파일수가 많아지게 되고 관리도 힘들어진다.
DTO( Data Transfer Object : 데이터 전송 객체 )
개념
데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 개체이다.
Data에 접속하는 객체이다. 여기서 Data란 일반적인 Database도 될 수 있고, 파일도 될 수 있으며, 메모리도 될 수 있고, 기타 다른 저장소도 될 수 있다.
DTO는 프로세스 사이에서 데이터를 전송하는 객체를 의미한다. 이것은 이용하는 이유는 프로세스 간의 커뮤니케이션이 주로 개별 호출이 부담스러운 작업일 경우가 많은 원격 인터페이스(예:웹 서비스)에 의해 이루어지기 때문이다.
대부분의 개별 호출이 클라이언트와 서버 간의 왕복 시간을 소모하기 때문에, 호출 횟수를 줄이는 방법 중 하나는 몇 번의 호출에 의해 전송될 데이터를 모으는 DTO를 이용해서 한번만 호출하게 하는 것이기 때문이다.
VO와 DTO의 비교
DTO의 나머지 속성은 VO와 똑같다고 생각된다.
Core J2EE Patterns라는 책에서는 Value Object와 Transfer Object를 동일한 뜻으로 사용하지만, 반대로 Martin Fowler는 저서 Patterns of Enterprise Applicatino Architecture에서 약간 다른 의미로 이야기 한다.
DTO는 메소드 호출 횟수를 줄이기 위해 데이터를 담고 있는 녀석으로, VO는 값이 같으면 동일 오브젝트라고 볼 수 있는 것으로 표현하고 있다.
'JAVA' 카테고리의 다른 글
[spring] 스프링 프로젝트 2가지: Starter Project,Legacy Project(STS) (0) 2021.08.04 java환경변수,tomcat웹배포,mysql다운로드 (0) 2021.08.04 Mock-test (0) 2021.07.27 websocket:채팅 (0) 2021.07.27 3Tier: 예외처리,@Qualifier (0) 2021.07.27