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에는 Object 클래스의
- VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별한다.
- 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있다.
- 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수도 있다.
Entity 란?
- 실제 DB의 테이블과 매핑되는 객체이다.
- 데이터의 집합을 의미한다.
- 저장되고, 관리되어야 하는 데이터이다.
- 개념, 장소, 사건 등을 가리킨다.
- 유형 또는 무형의 대상을 가리킨다.
- ID를 통해 각각의 Entity를 구분하고 유일한 식별자를 갖고 있어야 한다.
- ID, 회원번호 등…
- 반드시 속성이 한개 이상 존재해야 한다.
- 이름, 주소 등…
- 영속적으로 존재하는 인스턴스의 집합이다.
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다.
정리
- DTO는 계층(Layer)간 데이터 이동을 위해 사용되는 객체
- VO는 값을 갖는 순수한 도메인
- Entity는 이를 DB 테이블과 매핑하는 객체
최종 수정 : 2023-08-01