DAO 인터페이스 (DAO)
DAO 인터페이스는 데이터 소스와 상호작용하는 메서드를 선언하는 역할을 합니다. 이 인터페이스는 데이터베이스와의 상호작용을 위한 계약을 정의합니다. DAO 인터페이스는 데이터 액세스 작업을 수행할 메서드의 시그니처만 정의하며, 실제 구현 내용은 포함하지 않습니다.
public interface UserDao {
User getUserById(int id);
void saveUser(User user);
void deleteUser(int id);
List<User> getAllUsers();
}
DAO 구현체 (DAOImpl)
DAO 구현체는 DAO 인터페이스에서 정의한 메서드를 실제로 구현합니다. 이 클래스는 데이터베이스나 다른 데이터 소스와의 실제 상호작용을 처리하는 로직을 포함하고 있습니다. DAO 구현체는 데이터베이스 연결, SQL 쿼리 실행, 결과 처리 등의 작업을 수행합니다.
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
private Connection getConnection() throws SQLException {
// 데이터베이스 연결을 얻는 로직을 구현합니다.
// 예: return DriverManager.getConnection(url, username, password);
return null;
}
@Override
public User getUserById(int id) {
User user = null;
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
user = new User(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
@Override
public void saveUser(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, user.getName());
pstmt.setString(2, user.getEmail());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void deleteUser(int id) {
String sql = "DELETE FROM users WHERE id = ?";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name"), rs.getString("email")));
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
}
요약
- DAO 인터페이스 (UserDao): 데이터 작업을 위한 메서드의 선언만 포함합니다. 실제 데이터 소스와의 상호작용은 구현되지 않습니다.
- DAO 구현체 (UserDaoImpl): DAO 인터페이스에서 정의한 메서드를 실제로 구현하여 데이터 소스와 상호작용을 처리합니다.
이러한 구조를 통해 데이터 접근 로직을 애플리케이션의 비즈니스 로직과 분리하고, 코드의 유연성과 유지보수성을 향상시킬 수 있습니다.
'세미 프로젝트' 카테고리의 다른 글
[Java/Servlet] 게스트 입장에서 mvc 패턴으로 방 계약 구현 (0) | 2024.07.30 |
---|---|
[Java/Servlet] MVC 기반으로 방 계약 구현 (0) | 2024.07.29 |
[Java/Servlet] MVC 디자인 패턴: Model-View-Controller의 역할과 상호작용 + 방 리스트 조회 및 페이징 처리에 적용해보기 (0) | 2024.07.27 |
지도 API(Kakao Maps API)가져와서 웹에 띄우기 (0) | 2024.07.12 |