DTO, VO, Entity

DTO(Data Transfer Object) 란?

  • 데이터 전송(이동) 객체라는 의미를 가지고 있다.
  • 계층간 데이터 교환을 위한 객체(Java Beans)이다.
    • DB에서 데이터를 얻어 Service나 Controller 등으터 보낼 때 사용하는 객체를 말한다.
    • 로직을 갖고 있지 않는 순수한 데이터 객체이며, Getter와 Setter 메서드만을 갖는다.

VO(Value Object) 란?

  • VO(Value Object)는 말 그대로 값 객체라는 의미를 가지고 있다.
  • 객체의 불변성(객체의 정보가 변경하지 않음)을 보장한다.
    • Getter 메서드만 가질 수 있다.
    • 값은 생성자를 통해서 설정할 수 있고, 이때 Builder 패턴을 사용하면 편하다.
  • 서로 다른 이름을 갖는 VO 인스턴스더라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체라고 할 수 있다.
    • 이를 위해 VO에는 Object 클래스의 equals()hashcode()를 오버라이딩해야 한다.
  • VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별한다.
  • 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있다.
  • 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수도 있다.

Entity 란?

  • 실제 DB의 테이블과 매핑되는 객체이다.
  • 데이터의 집합을 의미한다.
  • 저장되고, 관리되어야 하는 데이터이다.
  • 개념, 장소, 사건 등을 가리킨다.
  • 유형 또는 무형의 대상을 가리킨다.
  • ID를 통해 각각의 Entity를 구분하고 유일한 식별자를 갖고 있어야 한다.
    • ID, 회원번호 등…
  • 반드시 속성이 한개 이상 존재해야 한다.
    • 이름, 주소 등…
  • 영속적으로 존재하는 인스턴스의 집합이다.
  • 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다.

정리

  • DTO는 계층(Layer)간 데이터 이동을 위해 사용되는 객체
  • VO는 값을 갖는 순수한 도메인
  • Entity는 이를 DB 테이블과 매핑하는 객체

계층간의 구분




최종 수정 : 2023-08-01