DAO, DTO, VO, Entity의 차이를 설명해 주세요.

DAO (Data Access Object)

  • DAO는 데이터베이스에 접근하는 역할을 하는 객체이다.

  • 실제로 DB에 접근하여 데이터의 CRUD 기능을 수행한다.

  • JPA에서는 JpaRepository를 상속받는 Repository 객체들이 DAO라고 볼 수 있다.

  • 효율적인 커넥션 관리와 보안을 위해 사용한다.

DTO (Data Transfer Object)

  • DTO는 계층 간 데이터를 전달하기 위한 객체다.

  • 로직을 가지지 않고, gettersetter 메서드만 가진 순수한 객체다.

  • 데이터 전달만을 위한 객체라면 getter, setter 외에 메서드를 가질 이유가 없다.

  • setter를 사용하면 가변 객체, 생성자를 사용하면 불변 객체로 활용할 수 있다.

VO (Value Object)

  • VO는 값 자체를 표현하는 객체다.

  • DTO와 비슷한 개념인데, DTO는 setter를 가지고 있어 값이 변할 수 있다.

  • VO는 setter를 가지지 않아 오직 읽기만 가능하다.(불변, Read-Only)

  • 또한 VO는 getter 외에 다른 로직을 포함할 수 있다.

  • VO는 값 자체 표현 용도로 사용하는 것이 목적이기 때문에 속성값이 모두 같으면 같은 객체로 판단해야 한다. 때문에 equals(), hashCode()의 오버라이딩이 필요하다.

Entity

  • Entity는 실제 DB 테이블과 매핑이 되는 객체다.

  • Entity를 DTO처럼 데이터 전달이나 API 응답 용도로 사용하면 안 된다. 왜냐하면, 불필요한 데이터를 노출할 위험도 있고, Entity는 컬럼이 자주 변경될 수 있는데 컬림이 변경되면 API 스펙 자체가 바뀐다.

  • Entity는 setter, 비즈니스 로직을 포함할 수 있다.

정리

DTO
VO
Entity

용도

계층 간 데이터 전송

값 자체 표현

DB 테이블 매핑

가변/불변

가변 혹은 불변

불변

가변 혹은 불변

로직

getter, setter외 로직을 갖지 않는다.

getter 외 로직을 가질 수 있다.(setter 제외)

로직을 가질 수 있다.

참고

Last updated