블로그 내 검색

2013. 3. 28.

JavaBeans, VO, DTO?

먼저 정의부터 보면......

JavaBeans

위 링크들에 설명된 규칙을 따라 디자인된 자바 객체를 말합니다.
핵심은 "전달 혹은 조작이 가능하도록 속성에 대한 접근자를 제공하며 기본 생성자를 반드시 갖는 객체" 라고 생각되네요.

VO (Value Object)

값 개체 그 자체를 말한다고 합니다. 전 일반적으로 JavaBeans 규약을 따르는(그냥 기본 생성자에 get, set 로 필드에 접근할 수 있다면) 그것을 VO라 불렀는데,
좀더 정확하게는 그런 것이 아니더군요.
값 자체를 나타내며 일반적으로 자바에서는 다른 값들의 집합 객체으로 표현됩니다. 그리고  불변(immutable)입니다!!

이펙티브 자바 책에서도 특별한 이유가 없다면 모든 값 객체는 불변으로 디자인 하는걸 추천했던 것 같습니다. 만일 새로운 값이 필요하다면 새로 new 연산자를 쓰는 것이 추천된다고 합니다

흥미로운 포스트 하나 링크합니다


DTO(Data Transfer Object)

예전 EJB 에서 사용되던 패턴이라고 합니다. 각 계층간 데이터 교환 시에 데이터를 직접 하나하나 전달하거나 가져가지 않고 객체를 하나 만들어서 그것을 전달하는 패턴이죠. EJB에서는 각 계층이 네트워크로 묶일 때가 많아서 계층간 작은 데이터의 작은 교환이 성능 저하로 이어지기에 DTO가 필수였다고 하는군요.
DTO에는 절대 비즈니스 로직같은 특정 액션이 들어가서는 안되고 정말 단순한 값의 전달만을 위한 메서드만을 허용한다고 합니다. 대부분 위에 이야기한 JavaBeans 규약을 따라 만들어지고 사용됩니다. 개념이나 목적의 차이가 있을 뿐 내부 구현은 큰 차이가 없기에 보통 VO라고 부르는 등 많이 섞어 부릅니다.

요약하면

"각 계층간 데이터 교환을 위한 자바빈즈"

최근 풍성한 도메인 방식이 유행하고 있는데 그런 방식에서는 거의 사용될일이 없다고도 볼 수 있겠네요.

참고자료