Data Access Object의 약자로 데이터 접근 객체를 의미한다. 소프트 웨어 개발에서 데이터베이스나 다른 데이터 저장소에 접근하여 데이터를 조작하고 관리하는 데 사용되는 객체이다.
DAO는 비즈니스 계층과 데이터 저장 계층사이의 인터페이스 역활을 한다. 비즈니스 로직은 DAO를 통해서 데이터 저장소에 접근하고 필요한 데이터를 가져오거나 업데이트 할 수 있다. 이를 통해 데이터 저장소에 대한 추상화를 제공하고, 비즈니스 로직과 데이터베이스 간의 결합도를 낮출 수 있다.
DAO는 주로 CRUD작업을 수행하는 메서드를 포함하고있다.
DTO는 Data Trnasfer Object의 약자로 데이터 전송 객체를 의미한다. DTO는 비즈니스 계층과 데이터 접근 계층 사이에서 데이터를 전송하는데 사용된다.
정리
DTO -> 데이터 전달하기 위한 클래스, 객체
DAO -> 데이터에 대한 CRUD 메서드들을 가지고 있음
DAO 예시
@Repository
public class UserRepository {
private final EntityManager entityManager;
public UserRepository(EntityManager entityManager) {
this.entityManager = entityManager;
}
public <T> T save(T entity) {
return entityManager.merge(entity);
}
public <T> T findById(Class<T> entityClass, Long id) {
return entityManager.find(entityClass, id);
}
public <T> List<T> findAll(Class<T> entityClass) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<T> query = criteriaBuilder.createQuery(entityClass);
Root<T> root = query.from(entityClass);
query.select(root);
return entityManager.createQuery(query).getResultList();
}
public <T> void deleteById(Class<T> entityClass, Long id) {
T entity = entityManager.find(entityClass, id);
if (entity != null) {
entityManager.remove(entity);
}
}
}
DTO 예시
// DTO 예시
public class UserDTO {
private Long id;
private String username;
private String email;
// Getter와 Setter 메서드 생략
// 생성자 등 추가적인 메서드 생략
}