혼용되는 개념에 정리해보고자 쓰는 글입니다.
실제 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를 사용하도록 설계하자!