본문 바로가기
Engineering WIKI/Docs

DAO, DTO, VO, Entity 개념 뿌수기!

by wonos 2023. 9. 21.

DAO(Data Access Object) 란?

  • repository := DAO (거의 비슷함)
  • 김영한님 설명
    • 이 둘은 거의 같다고 생각하셔도 무방합니다. 좀 더 깊이있게 차이를 설명하자면, repository는 엔티티 객체를 보관하고 관리하는 저장소이고, DAO는 데이터에 접근하도록 DB접근 관련 로직을 모아둔 객체 입니다. 둘 다 개념 차이일뿐 실제로 개발할 때는 비슷하게 사용합니다.
  • 실제로 DB에 접근하는 객체이다.
  • Persistence Layer(DB에 data를 CRUD하는 계층)이다.
  • Service와 DB를 연결하는 고리의 역할을 한다.
  • SQL를 사용(개발자가 직접 코딩)하여 DB에 접근한 후 적절한 CRUD API를 제공한다.
    • JPA 대부분의 기본적인 CRUD method를 제공하고 있다.
    • extends JpaRepository<User, Long>
    • 예시(JPA 사용 시)
    public interface QuestionRepository extends CrudRepository<Question, Long> {
    
    } 
    

DTO(Data Transfer Object) 란?

  • 계층간 데이터 교환을 위한 객체(Java Beans)이다.
    • DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말함.
    • 즉, DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바뀌어서 오고가는 것.
    • DTO는 목적 자체가 로직을 갖고 있지 않고 단순히 데이터를 전달하는 것이기 때문에 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.
    @Getter 
    @Setter
    class TestDTO {
      private String id;
      private String name;
      private String nickname;
    }
    

VO(Value Object) 란?

  • Read-Only 특징을 가진다.
  • VO의 핵심 역할은 equals()와 hashcode()를 오버라이딩 하는 것이다.
  • equals, hashCode Method를 구현하여 특정 중요한 Data를 전달할 때VO를 생성하여 이를 동일한 객체 비교까지 필요한 Logic내에서 주로 사용

 

Entity class 란?

  • domain package
  • 실제 DB의 테이블과 매칭될 클래스
    • 즉, 테이블과 링크될 클래스임을 나타낸다.
    • Entity 클래스 또는 가장 Core한 클래스라고 부른다.
    • @Entity, @Column, @Id 등을 이용
    • Entity는 비즈니스 로직이 있고, 실제 데이터도 변경되기 때문에, Setter를 최대한 사용하지 않는 편이 좋다.
  • 최대한 외부에서 Entity 클래스의 getter method를 사용하지 않도록 해당 클래스 안에서 필요한 로직 method을 구현한다.