Entity, DTO, VO

SW고구마·2021년 11월 8일
0

혼용되는 개념에 정리해보고자 쓰는 글입니다.

Entity ?

실제 DataBase(Oracle, Mysql 등)에 1:1로 매핑되도록 작성하는 클래스로, 테이블 내에서 칼럼이 되는 것들을 작성.

최대한 외부에서 Getter, Setter 메소드를 사용하지 않도록 해당 클래스 내에 사용되는 메소드를 작성해 Domain Logic만을 구성한다.

DTO ?

DTO는 "Data Transfer Object"의 약자로 데이터 전송을 위해 사용되는 객체를 말한다.

  • 계층 간의 데이터 교환(Service <-> Cotroller <-> View)을 위한 객체

  • 어떤 로직을 갖고 있지 않은 순수한 객체로, GetterSetter 만을 갖는다.

  • 하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO 에는 불변객체(필드값에 final)로 정의 한다면 Layer 간의 데이터 교환에서 데이터의 불변성을 보장할 수 있는 이점이 생김

  • Controller 에서도 ResponseDTO 형태로 Client에게 전달

VO ?

VO는 "Value Object"의 약자로 값 그 자체를 표현하는 객체를 말한다.

  • 서로 다른 이름을 가진 VO 인스턴스의 필드값이 모두 같은 경우 같은 객체로 본다.
    모든 인스턴스의 값이 같은 경우 같은 객체로 처리하기 위해 equals()hashcode()를 오버라이딩 해줘야함.

  • 객체의 불변성을 보장한다

  • 로직을 포함할 수 있다

결론 ?

DTO와 VO의 경우 Core J2EE Patterns 라는 책의 초판에서 데이터 전송 객체를 VO로 언급 후, 2판에서 TO 객체로 정정하는 탓에 혼용이 생겼다고 함
따라서 Layer 간에 데이터 교환의 경우 DTO를 사용하도록 설계하자!

profile
하루하루 조금씩이라도

0개의 댓글