본문 바로가기

지식/Java

[Java] DTO, VO, Entity 란?

개발을 하다보면 UserDB를 갖고도 여러가지 비즈니스 로직을 실행할 때가 많습니다.

(ex : 로그인, 회원가입, 회원이 갖고 있는 포인트 조회, 변경 등등)

우선 개념을 먼저 설명드리면

 

- DTO

계층간의 데이터 교환을 목적으로 한 객체(자바 빈) 입니다.

로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만 갖습니다.

- VO 

DTO와 혼용되어 동일하게 사용이 되기도 하지만, DTO와의 차이점으로는 불변의 객체로

특정한 값을 나타내는 객체 입니다. 로직을 포함할 수 있습니다.(getter만 존재)

- Entity

Entity 클래스는 실제 DB의 테이블과 1:1로 매핑 되는 클래스입니다.

 

 

- Entity를 DTO대신 사용한다면?

View에서 표현하는 속성 값들의 요청이 계속 달라집니다.(ex : 로그인, 회원가입, 사용자 포인트 조회 등)

그 때마다 Entity의 속성값을 변경하면 영속성 모델을 표현한 Entity의 순수성이 모호해지기 때문입니다.

Controller에서 쓸 DTO와 Entity클래스를 분리하는게 좋습니다.

 

- Entity와 DTO를 분리하는 이유

위의 내용과 이어집니다.

분리하는 이유는 DB계층과 View 계층 사이의 역할을 분리하기 위해서 입니다.

DTO는 DB와 1:1매핑을 하는 Entity 객체와 달리 각 계층끼리 주고 받는 전송 객체입니다.

순수하게 데이터를 담고 있다는 점에서는 Entity와 유사하지만, 목적 자체가 데이터의 전달이므로 일회성으로 사용되는 성격이 강합니다.

또한, DTO가 일회성으로 대이터를 주고 받는 용도로 사용되는 것과 달리 생명주기가 전혀 다르기 때문에 분리하여 처리해야 합니다.

 

JPA를 이용하게 된다면 Entity 객체는 단순히 데이터를 담는 객체가 아니라 실제 DB와 관련이 있고 내부적으로 EM(EntityManager)이 관리하는 객체입니다.

 

 

 

 

참고

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

https://sasca37.tistory.com/2#--%--DTO%---Data%--Transfer%--Object-%C-%A-