본문 바로가기

IT 개념

DTO VO

https://www.youtube.com/watch?v=z5fUkck_RZM

 

1. DTO ( Data Transfer Object )

1) 데이터를 전달하기 위해 사용하는 객체 (데이터를 담아서 전달하는 바구니)

2) "계층 간" 데이터를 전달하기 위한 객체

3) 특징

(1) 오직 getter/setter 메서드만을 갖는다.

(2) 다른 로직을 갖지 않는다.

(3) setter 를 없애고생성자를 통해, 속성값들을 초기화하게 만들면 DTD가 전달하는 객체가 전달 과정중에

변경되지 않음을 보장할 수 있다.

4) DTO Class와 Entity Class를 분리하라.

(1) Entity 클래스는 절대로 요청이나 응답 값을 전달하는 클래스로 사용하면 안된다.

- Entity 클래스는 데이터베이스와 매핑되어 있는 핵심 클래스이기 때문이다.

- Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경된다.

(2) 요청이나 응답 값을 전달하는 클래스는 반드시 뷰에 변경에 따라 다른 클래스들에게 영향을 끼치지 않고

자유롭게 변경할 수 있는 DTO를 사용해야 한다.

- 응답 값으로 여러 테이블들을 조인한 결과 값을 줘야 할 경우가 빈번하기 때문이다.

2. VO ( Value Object ) - (ex: 돈)

1) 값, 그 자체를 표현하는 객체

2) setter 성격의 메소드는 포함하면 안되고 생성자를 통해서만 값을 초기화해야 한다.

3) DTO와 달리 다른 로직을 가질 수 있다.

4) 완전한 VO 로 만들기 위해서는 객체를 속성 값들로만 비교하도록 equals 메소드와 hashCode 메서드를

모두 오버라이딩 해줘야 한다.

3. DTO와 VO의 차이


DTO VO
용도 레이어 간 데이터 전달 값 자체 표현
동등 결정 속성값이 모두 같다고 해서 같은 객체가 아니다. 속성 값이 모두 같으면 같은 객체다.
가변 / 불변 setter 존재 시 가변,
setter 비 존재 시 불변
불변
로직 getter/setter외의 로직을 갖지 않는다. getter/setter외의 로직을 가질 수 있다.