카테고리 없음

Entity vs DTO vs VO

suesoo 2023. 8. 16. 02:34

Entity

▶ Entity의 개념

- 실제 DB의 테이블과 1:1로 매핑되는 핵심 클래스(객체)이며, DB의 테이블 내에 존재하는 칼럼만을 필드로 가져야 한다.

Entity를 기준으로 테이블 생성되고 스키마가 변경되며, Entity를 요청이나 응답값을 전달하는 클래스로 사용하면 안 되고 

상속이나 구현체여서는 안된다!

 

▶ Entity의 특징

- id를 통해 각각 Entity를 구분

- 비즈니스 로직 포함 가능

- setter를 가지면 가변 객체로 활용가능 하지만 객체의 일관성을 유지해야 유지 보수성이 올라가기 때문에 setter 사용을 지양해야 한다.

 

▶ Entity 예시코드


 

DTO

▶ DTO의 개념

- DTO는 계층 간 데이터 교환을 위해 사용하는 객체이며 여러 레이어 사이에서 사용할 수 있다.

 

▶ DTO의 특징

- 주로 View와 Controller 사이에서 데이터를 주고받을 때 활용

- getter/setter 메서드를 포함하며, 비즈니스 로직은 포함 X

- setter를 가지는 경우 가변객체로 활용

- 생성자를 이용해서 초기화하는 경우 불변객체로 활용가능 

▶ DTO 예시코드


VO

▶ VO 의개념

- VO(Value Object) 값 그 자체를 표현하는 객체이며, VO는 객체들의 주소가 달라도 값이 같으면 동일 객체이다.

 

▶ VO의 특징

- 객체의 불변성을 보장

- VO는 getter/setter메서드와 함께 비즈니스 로직도 포함가능

- 값 비교를 위해 equals()와 hashCode() 메서드를 오버라이딩 해야 한다.

 

 

▶ VO  예시코드


📌 Entity vs DTO vs VO  비교

구분 Entity DTO VO
생성 목적 데이터베이스 테이블 매핑 객체 레이어간 데이터 전송 객체 값 표현 객체
로직 포함 가능 불가능 가능
상태 변경 여부 가변 or 불변 객체 가변 or 불변 객체 불변 객체
getter 사용 가능 가능 가능
setter 사용 불가능 가능 가능
Spring Tier 범위 Service <-> Repository Controller <->Service
Client <-> Controller
Controller <->Service