데이터베이스와 연동하여 데이터를 조작하는 프로그램 작성 시, 중요한 개념 중 하나는 DAO(Data Access Object)이다. Java에서의 DAO 개념과 사용 이유에 대해 설명하겠다.
Java에서 DAO는 Data Access Object의 약어로, 데이터베이스와 연동하여 데이터를 조작하는 객체를 말한다.
DAO는 데이터베이스와의 연결을 관리하고, 데이터베이스에서 데이터를 가져오거나 데이터를 저장하는 등의 역할을 수행한다. DAO는 보통 인터페이스로 작성되어 있고, 실제로는 이 인터페이스를 구현하는 클래스를 사용한다.
DAO는 데이터베이스와 비즈니스 로직 간의 결합도를 낮추는데 큰 역할을 한다. 데이터베이스가 변경되어도 비즈니스 로직이 영향을 받지 않도록 해주며, 코드의 재사용성과 유지보수성을 높여준다.
DAO를 사용하면 데이터베이스와의 연결과 데이터베이스 조작을 캡슐화할 수 있으므로, 비즈니스 로직에서는 단순히 DAO의 메서드를 호출함으로써 데이터베이스 조작을 수행할 수 있다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있다.
간단히 말해, DAO는 데이터베이스와 연동하여 데이터를 조작하는 객체로, 데이터베이스와 비즈니스 로직 간의 결합도를 낮추고 코드의 재사용성과 유지보수성을 높여주는 것이다.
예를 들어, 사용자 정보를 데이터베이스에서 가져오는 기능을 DAO를 사용하여 구현하는 예를 생각해 보겠다.
데이터베이스에서는 사용자 정보를 다음과 같은 형태로 저장할 수 있다.
User table
------------------------
| ID | Name | Address |
------------------------
| 01 | Tom | Seoul |
| 02 | Jane | Busan |
| 03 | Alice | Daegu |
------------------------
이때, 사용자 정보를 데이터베이스에서 가져와서 비즈니스 로직에서 사용하기 위해서는 DAO를 사용하여 다음과 같이 구현할 수 있다.
public interface UserDao {
List getAllUsers();
User getUserById(String id);
}
public class UserDaoImpl implements UserDao {
private Connection conn;
public UserDaoImpl(Connection conn) {
this.conn = conn;
}
@Override
public List getAllUsers() {
List users = new ArrayList<>();
try (Statement stmt = conn.createStatement()) {
String query = "SELECT * FROM User";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String id = rs.getString("ID");
String name = rs.getString("Name");
String address = rs.getString("Address");
User user = new User(id, name, address);
users.add(user);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return users;
}
@Override
public User getUserById(String id) {
User user = null;
try (PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM User WHERE ID = ?")) {
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
String name = rs.getString("Name");
String address = rs.getString("Address");
user = new User(id, name, address);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return user;
}
}
위와 같이 UserDao 인터페이스를 정의하고, UserDaoImpl 클래스를 구현하여 DAO를 구현할 수 있다. UserDaoImpl 클래스에서는 Connection 객체를 사용하여 데이터베이스와 연결하고, getAllUsers() 메서드와 getUserById() 메서드를 구현하여 사용자 정보를 가져올 수 있다. 이를 통해 데이터베이스와 비즈니스 로직 간의 결합도를 낮추고, 코드의 재사용성과 유지보수성을 높일 수 있는 것이다.
'스프링부트' 카테고리의 다른 글
Dependency Injection/DI (0) | 2023.05.14 |
---|---|
데이터 전송을 위한 DTO(Data Transfer Object) 이해하기 (0) | 2023.04.13 |
DTO와 DAO의 차이점 DTO: Data Transfer Object/DAO: Data Access Object (0) | 2023.04.13 |
What is Spring Boot? (0) | 2023.04.13 |
데이터베이스 조회 및 조작 제네릭타입 (0) | 2023.04.13 |