DTO(Data Transfer Object)와 DAO(Data Access Object)를 나누는 이유는 소프트웨어 설계 원칙 중 하나인 SRP (Single Responsibility Principle)를 따르기 위함입니다. 각 클래스가 하나의 책임만 가지도록 분리하여 코드의 유지보수성과 확장성을 높이는 것입니다. 다음은 DTO와 DAO를 나누는 구체적인 이유입니다:
이전 예시에서 DTO와 DAO의 역할을 다시 한 번 정리해보면:
MemberDTO:
package dto;
import java.util.Date;
public class MemberDTO {
private int id;
private String email;
private String password;
private String nickName;
private String phoneNumber;
private String userImagePath;
private Date dateCreated;
private Date lastUpdated;
// 생성자, Getter, Setter 생략
}
MemberDAO:
package dao;
import java.sql.*;
import java.util.*;
import dto.MemberDTO;
public class MemberDAO {
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
// 데이터베이스 연결 정보
private static final String driver = "oracle.jdbc.OracleDriver";
private static final String url = "jdbc:oracle:thin:@localhost:1521:xe";
private static final String id = "connection";
private static final String pwd = "1234";
public MemberDAO() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, id, pwd);
} catch (Exception e) {
e.printStackTrace();
}
}
public int insertMember(MemberDTO dto) {
String sql = "INSERT INTO \"USER\" (id, email, password, nick_name, phone_number, user_image_path, date_created, last_updated) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, dto.getId());
pstmt.setString(2, dto.getEmail());
pstmt.setString(3, dto.getPassword());
pstmt.setString(4, dto.getNickName());
pstmt.setString(5, dto.getPhoneNumber());
pstmt.setString(6, dto.getUserImagePath());
pstmt.setDate(7, new java.sql.Date(dto.getDateCreated().getTime()));
pstmt.setDate(8, new java.sql.Date(dto.getLastUpdated().getTime()));
return pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return -1; // 오류 발생 시 -1 반환
}
// 추가적인 CRUD 메서드 생략
public void close() {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (con != null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
이와 같이 DTO와 DAO를 나눔으로써 각각의 클래스가 명확한 역할과 책임을 가지게 되며, 결과적으로 코드의 가독성, 유지보수성, 확장성, 재사용성 등이 향상됩니다.