혼용되는 개념에 정리해보고자 쓰는 글입니다.
실제 DataBase(Oracle, Mysql 등)에 1:1로 매핑되도록 작성하는 클래스로, 테이블 내에서 칼럼이 되는 것들을 작성.
최대한 외부에서 Getter
, Setter
메소드를 사용하지 않도록 해당 클래스 내에 사용되는 메소드를 작성해 Domain Logic만을 구성한다.
DTO는 "Data Transfer Object"의 약자로 데이터 전송을 위해 사용되는 객체를 말한다.
계층 간의 데이터 교환(Service <-> Cotroller <-> View)을 위한 객체
어떤 로직을 갖고 있지 않은 순수한 객체로, Getter
와 Setter
만을 갖는다.
하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO 에는 불변객체(필드값에 final)로 정의 한다면 Layer 간의 데이터 교환에서 데이터의 불변성을 보장할 수 있는 이점이 생김
VO는 "Value Object"의 약자로 값 그 자체를 표현하는 객체를 말한다.
서로 다른 이름을 가진 VO 인스턴스의 필드값이 모두 같은 경우 같은 객체로 본다.
모든 인스턴스의 값이 같은 경우 같은 객체로 처리하기 위해 equals()
와 hashcode()
를 오버라이딩 해줘야함.
객체의 불변성을 보장한다
로직을 포함할 수 있다
DTO와 VO의 경우 Core J2EE Patterns 라는 책의 초판에서 데이터 전송 객체를 VO로 언급 후, 2판에서 TO 객체로 정정하는 탓에 혼용이 생겼다고 함
따라서 Layer 간에 데이터 교환의 경우 DTO를 사용하도록 설계하자!