DTO, VO, DAO, Entity의 차이점

DyungE_100·2022년 4월 18일
0

DB

목록 보기
4/5

1. DAO(Data Access Object)란?

  • DB에 직접적으로 접근하기 위한 객체이다.

  • Service와 DB를 연결하는 연결 고리 역할을 한다.

  • DB에 접근하기 위한 로직을 분리하기 위해 사용한다.

  • DB에 접근하여 CRUD 기능을 수행한다.

2. DTO(Data Transfer Object)

  • DTO는 계층(Controller, View, Business Layer) 간의 데이터 전달을 위한 객체이다.

  • 비즈니스 로직을 갖고 있지 않으며, getter/setter 메서드만을 갖는다.

  • toEntity() 메서드를 통해서 DTO에 필요한 부분을 이용하여 Entity로 만든다.

  • 또한 Controller Layer에서 Response DTO 형태로 Client에 전달할 때 활용성이 제일 높다.

@Getter
@Setter
public class SignUpDTO {
    private String userId;
    private String userPassword;
    private String userName;
    private String userEmail;
}

3. VO(Value Object)

  • 값 그 자체를 나타내는 객체이다.

  • DTO와 동일한 개념으로 같지만, Read-Only(불변성) 속성을 갖는다.

  • 보통 VO는 특정한 비즈니스 값을 담는 객체이고 비즈니스 로직도 포함 가능하다. 모든 레이어에서 사용 가능하다.

  • VO는 GetterSetter를 모두 가질 수 있으나, equals()hashCode()를 오버라이딩하여 자주 사용한다. 따라서 value가 같으면 같은 객체라고 본다.

4. Entity Class

  • 흔히 아키텍처를 설명할 때 Domain 클래스로 불리기도 한다.
    Spring 3 Tier인 Persistence, Business, Presentation Tier 중 Persistence Tier에서 사용된다.

  • 실제 DB 테이블과 1:1로 매핑(Mapping)되는 핵심 클래스(Class)로, DB 테이블에 존재하는 칼럼(Column)들을 필드(Field)로 가지는 객체다.

  • Entity는 데이터베이스 영속성(Persistent)의 목적으로 사용되는 객체이며, 때문에 요청이나 응답으로 바로 값을 전달하는 클래스로 사용하는 것은 좋지 않다. 이러한 경우에는 DTO를 사용하여 값을 전달하는 게 맞다. 느낀 바로는 Entity 클래스와 DTO 클래스를 분류하여 설계하였을 때 유지보수면에서 확실히 자유로워질 수 있다.(많은 서비스 클래스와 비즈니스 로직들이 Entity 클래스를 기준으로 동작하기 때문에 Entity 클래스가 변경되면 좋지 않다는 말과 일맥상통하다.)

  • Entity 클래스에서는 Setter 메서드 사용을 지양해야 한다. Setter로 접근하여 변경되는 순간 객체의 일관성, 안정성을 보장하기 힘들어지기 때문이다. 따라서 Setter 대신 Constructor(생성자)나 Builder Pattern을 사용해야 한다.





https://choitaetae.tistory.com/97,
http://melonicedlatte.com/2021/07/24/231500.html,
https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html,
https://wildeveloperetrain.tistory.com/101,
https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0,
https://velog.io/@ha0kim/DAO-DTO-VO-%EC%B0%A8%EC%9D%B4,

0개의 댓글