
DTO(Data Transfer Object)와 DAO(Data Access Object)는 애플리케이션에서 데이터를 처리하고, 데이터베이스와 상호작용하는 데 중요한 역할을 하는 패턴들임. 이 둘은 데이터의 관리와 전송을 보다 구조적으로 처리하기 위해 사용되며, 서로 다른 역할을 담당함.
DTO는 애플리케이션 계층 간에 데이터를 전송할 때 사용하는 순수한 데이터 객체임. DTO는 일반적으로 getter와 setter 메소드만 포함하고, 비즈니스 로직이나 데이터베이스 관련 코드를 포함하지 않음. DTO는 단순히 데이터를 담는 그릇 역할을 하며, 네트워크 통신 또는 다른 계층 간의 데이터 전송을 목적으로 사용됨.
사용자 정보를 전달하기 위한 UserDTO 클래스의 예시
public class UserDTO {
private int id;
private String name;
private String email;
// 기본 생성자
public UserDTO() {}
// 생성자
public UserDTO(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getter와 Setter
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
public class UserDAO {
private DataSource dataSource; // 데이터베이스 연결을 위한 DataSource
public UserDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
// 사용자 추가 메소드
public int insert(UserDTO user) throws SQLException {
String query = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection con = dataSource.getConnection();
PreparedStatement pstmt = con.prepareStatement(query)) {
pstmt.setString(1, user.getName());
pstmt.setString(2, user.getEmail());
return pstmt.executeUpdate();
}
}
// 사용자 조회 메소드
public UserDTO findById(int id) throws SQLException {
String query = "SELECT * FROM users WHERE id = ?";
try (Connection con = dataSource.getConnection();
PreparedStatement pstmt = con.prepareStatement(query)) {
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
return new UserDTO(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
}
}
return null;
}
}
UserDAO userDAO = new UserDAO(dataSource);
UserDTO user = userDAO.findById(1); // DAO가 데이터를 DB에서 조회하고, DTO로 반환