DTO, VO, ENTITY

JIHYE·2023년 3월 29일
0

[CS지식]

목록 보기
3/8
post-thumbnail

1. DTO(Data Transfer Object)

  • 레이어 간 데이터를 전달하는 객체 ex) OMR
  • setter, getter로 이루어져 있음
  • 주로 View와 Controller 사이에서 데이터를 주고 받을 때 사용
  • 데이터 접근 메서드 외에 기능을 가지지 않음(정렬, 직렬화 등 데이터 표현을 위한 기능은 가질 수 없음)
  • 데이터의 캡슐화를 통해 유연한 대응이 가능(데이터 요청 수 감소 효과)

2. VO(Value Object)

  • 값을 가지는 객체.값 자체로 의미를 가지는 객체 ex) 돈
  • 변하지 않는 값을 가지는 객체(값이 변하지 않음을 보장하여 코드의 안전성과 생산성을 높임)
  • 비즈니스 로직을 포함
  • 불변 객체이기 때문에 getter메소드를 가질수는 있지만, setter메소드를 가지지않음. 생성자를 통해서만 set
  • 값 비교를 위해 equals, hashCode를 오버라이딩해야함
  • 값이 같다면 동일한 객체(각 객체를 비교하는데 사용되는 ID가 없음. 같은 객체인지 판단하기 위해 각 속성들의 값을 비교)

💡DTO와 VO의 공통점

  • 레이어 간 데이터를 전달할 때 사용 가능(VO는 불변을 보장하기 때문에 데이터 전달 용도로 사용 가능)

💡DTO와 VO의 차이점

  • DTO
    • 값이 변할 수 있음
    • 레이어 & 레이어 사이에서 사용
    • DTO dto1(1) != DTO dto2(1)
    • 데이터 접근 이외의 기능을 가지지 않음
  • VO
    • 값이 변하지 않음
    • 모든 레이어에서 사용 가능
    • VO vo1(1) == Vo vo2(1)
    • 비즈니스 로직 존재
public class CarVO{
    private final String color;

    public CarVO(String color){
        this.color = color;
    }
}

final String color = "red";
CarVO car1 = new CarVO(color);
CarVO car2 = new CarVO(color);

3. ENTITY

  • Entity실제 DB 테이블과 매핑되는 핵심 클래스(SPA에서 사용)
  • 이를 기준으로 테이블이 생성되고 스키마가 변경
  • 절대로 Entity요청이나 응답값을 전달하는 클래스로 사용해서는 안됨
  • Entityid로 구분
  • 비즈니스 로직을 포함
  • Entity는 DTO처럼 setter를 가지는 경우 가변 객체로 활용할 수 있음(없는 경우 불변객체)


❓❔ 회사에서 사용중인 VO를 확인해봤는데 setter, getter를 함수가 존재하고, 로직도 존재하고, implements serializable도 존재,,, DTO일까 VO일까,,,?

[출처] https://tecoble.techcourse.co.kr/post/2021-05-16-dto-vs-vo-vs-entity/
https://youtu.be/EeJnNaiMy3U

0개의 댓글