목적: DAO는 데이터베이스에 접근하는 객체이다. 데이터베이스의 CRUD(Create, Read, Update, Delete) 연산을 수행하는 메소드를 제공한다. 즉, 리포지토리를 의미한다.
ex) 사용자 정보를 관리하는 웹 애플리케이션에서 UserDAO 클래스는 사용자 데이터를 데이터베이스에 저장하고, 조회하고, 업데이트하고, 삭제하는 메소드를 제공할 수 있다.
목적: DTO는 계층 간 데이터 교환을 위한 Java Bean. 주로 다른 네트워크 통신이나 메소드 호출을 통해 데이터를 전송할 때 사용되며, 여러 데이터 필드를 하나의 객체로 묶어 전달한다. DTO는 로직을 포함하지 않고 순수한 데이터 객체이며, 주로 getter와 setter 메소드를 포함한다.
ex) 웹 애플리케이션에서 클라이언트에게 사용자 정보를 전송할 때 UserDTO 객체를 사용할 수 있다. 이 객체는 사용자의 이름, 이메일 등의 정보를 포함할 수 있으며, 이를 통해 데이터를 쉽게 전송하고 받을 수 있다.
참고 : domain != DTO다. domain은 비즈니스 로직을 담을 수 있지만 DTO는 비즈니스 로직을 포함하지 않고 오직 전달할 값만 가진다.
read-only 속성을 가져 불변의 값 타입이다. getter만 존재한다.
vo는 2가지 의미로 사용된다.
단순히 데이터 값을 전달하기 위한 용도로 사용되는 객체라는 뜻 (DTO와 같은 뜻. DTO = 데이터를 전송하는 목적으로 사용하는 객체.)
도메인 주도 설계에서 이야기하는 값 객체(Value Object)의 의미가 있다. 이 부분에 대한 자세한 내용은 JPA 기본편 강의에 있음(김영한의 vo는 이 의미.)