DAO는 Data Access Object의 약자로, DB의 데이터에 접근하기 위한 객체를 가리킨다.
DB에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.
직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.
사용자는 자신이 필요한 interface를 DAO에게 던지고 DAO는 이 interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다.
DAO는 데이터베이스와 연결할 connection까지 설정되어 있는 경우가 많다. 따라서 MyBatis 등을 사용할 경우 커넥션풀까지 제공되고 있기 때문에 DAO를 별도로 만드는 경우는 드물다.
public class UserDao {
public User findById(int userId) {
// 데이터베이스에서 사용자 정보를 가져오는 로직
// 예시로 더미 데이터를 사용
return new User(userId, "John Doe", "john@example.com");
}
public void save(User user) {
// 사용자 정보를 데이터베이스에 저장하는 로직
}
// 다양한 데이터베이스 조작 메서드들...
}
DTO는 Data Transfer Object의 약자로, 계층간 데이터 교환을 위한 Java Bean 이며 VO라고도 표현한다.
데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체이다.
DTO는 로직을 가지지 않는 데이터 객체이고, 데이터와 그 데이터에 대한 접근을 위한 getter setter 메소드만 가진다. (Database에서 데이터를 얻어 Service나 Controller에 보낼 때 사용하는 객체이다.)
public class UserDto {
private int userId;
private String username;
private String email;
public UserDto(int userId, String username, String email) {
this.userId = userId;
this.username = username;
this.email = email;
}
// Getter 및 Setter 메서드들...
@Override
public String toString() {
return "UserDto{" +
"userId=" + userId +
", username='" + username + '\'' +
", email='" + email + '\'' +
'}';
}
}
VO는 Value Object의 약자로, 값 자체를 표현하는 객체이다.
자바는 값 타입을 표현하기 위해 불변 클래스를 만들어 사용하는데, 불변 이라는 것은 read only 의 특징을 가진다.
VO는 DTO와 유사하지만 DTO와 달리 setter() 메소드는 가지지 않아 불변 클래스이다.
public class User {
private int userId;
private String username;
private String email;
public User(int userId, String username, String email) {
this.userId = userId;
this.username = username;
this.email = email;
}
// Getter 메서드들...
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", username='" + username + '\'' +
", email='" + email + '\'' +
'}';
}
}