← 목록으로Backend

DAO & DTO & VO

DAO는 실제로 DB의 data에 접근하기 위한 객체이다.

1. DAO(Data Access Object)

DAO는 실제로 DB의 data에 접근하기 위한 객체이다.

  • 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행한다.
  • Service와 DB를 연결하는 고리 역할을 한다.
  • Repository package가 바로 DAO다.
@Repository
@RequiredArgsConstructor
public class MemberRepository {

private final EntityManager em;

public void save(Member member) {
	em.persist(member);
}
public Member findOne(Long id) {
	return em.find(Member.class, id);
}
public List<Member> findAll() {
	return em.createQuery("select m from Member m", Member.class).getResultList();
}
public List<Member> findByName(String name) {
	return em.createQuery("select m from Member m where m.name = :name", Member.class)
		.setParameter("name", name)
		.getResultList();
	}
}

2. DTO(Data Transfer Object)

DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, 로직을 가지지 않는 순수한 데이터 객체(Java Beans)이다.

  • DTO는 즉, getter/setter 메서드만 가진 클래스를 의미한다.
  • DB에서 데이터를 얻어서 Service나 Controller 등으로 보낼 때 사용한다.
  • 즉 엔티티를 DTO 형태로 변환한 후 사용한다.

2. DTO(Data Transfer Object)

3. VO(value Object)

VO는 DTO와 달리 Read-Only 속성을 지닌 값 오브젝트다.

  • DTO는 setter를 가지고 있어서 값이 변할 수 있지만 VO의 경우에는 getter만 가지고 있어서 수정이 불가능하다.
  • DTO와 VO의 차이점은 DTO는 인스턴스 개념이고, VO는 리터럴 값 개념이다.
  • VO는 값들에 대해 Read-Only를 보장해줘야 존재의 신뢰성이 확보되지만 DTO의 경우에는 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 전달되어야 할 대상일 뿐이다.
  • 따라서 값 자체에 의미가 있는 VO와 전달될 데이터를 보존해야 하는 DTO의 특성상 개념이 다르다.

3. VO(value Object)

관련 글

BackendFunctional Interface를 활용한 Lazy 초기화 전략Backend배치 애플리케이션 종료되지 않는 현상 (with. Connection Pool)BackendIoC 원칙에 위배되는 static 키워드?