hrming

[Spring] Entity, DTO, VO 본문

Spring

[Spring] Entity, DTO, VO

hrming 2024. 7. 8. 09:18

Entity

- Entity 클래스는 실제 DB의 Relation과 1:1로 매핑되는 클래스

- DB Relation 내에 존재하는 attribute만 속성(필드)로 가져야 하는 것이 특징

- 가급적 외부에서는 Entity 클래스의 필드에 직접적으로 접근하지 않도록 하고, getter/setter 보다는 용도에 맞는 구체적인 메서드를 정의하여 값을 사용하도록 권장됨

- Request / Response 시, Entity 클래스를 직접 사용하는 것은 권장하지 않음

 

DTO

- DTO(Data Transfer Object)는 데이터 전송 객체의 준말

- 계층 간 데이터 교환을 위해 사용하고, 별도의 로직 없이 getter / setter 만 존재함

- 주로 비동기 처리를 위해 사용

 

VO

- VO(Value Object)는 값 객체의 의미를 가진다. 특정 비즈니스 값을 담아낸다.

- Read Only 속성

- 모든 속성 값이 같다면, 같은 객체임을 의미함

- 생성자를 제외하고 set 성격의 메서드를 사용할 수 없음

- VO 내부에 선언된 필드 내 모든 값들이 같을 경우, 동일한 객체라고 판단함

이를 위해, equals()와 hashCode()메서드를 Override해서 각 객체의 동일성을 판단할 수 있다.

 


** Entiy와 DTO를 구분해서 사용하는 이유

- DB(Persistence Layer) 와 View(Presentatioin Layer)의 명확한 분리를 위함

- Entity는 테이블과 매핑되므로, 변경되면 다른 클래스에 영향을 끼치기 쉬움

- 또한, DTO는 주로 View와 통신하며 자주 변경되므로 분리가 필요

- DTO는 도메인 모델 객체인 Entity를 복사한 후, Presentation Logic만을 추가

 

** DTO vs CO

DTO VO
가변 클래스 (getter/setter) 불변 클래스 (getter)
인스턴스 개념 리터럴 개념
Layer 간의 통신 용 객체 특정한 비즈니스 값을 담는 객체

 


참고 및 출처 :

https://youwjune.tistory.com/39

 

[Spring] Entity, DTO, VO 무슨 차이야?

앞서 DDD에 대한 포스트를 작성하며 Domain에 대해서도 살펴보게 되었다. 최근에 Domain이랑 Entity에 대한 차이가 무엇이냐는 질문을 받았는데, 나는 여태껏 거의 동일한 개념이라고 생각해 왔다. 저

youwjune.tistory.com

 

https://kbwplace.tistory.com/162

 

[Spring] DAO, DTO, VO의 개념과 차이점

DAO (Data Access Object) : DB의 data에 접근하기 위한 객체로 실제로 DB에 접근하는 객체이다. 프로젝트의 서비스 모델과 실제 DB를 연결하는 역할을 하며, JPA에서는 DB에 데이터를 CRUD하는 Repository 객체

kbwplace.tistory.com

 

https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0

 

 

 

 

Comments