Java DAO로 데이터베이스 접근 최적화하기!
KUKJIN LEE • 6개월 전 작성
Java DAO (Data Access Object) 제대로 활용하기
DAO(Data Access Object)는 데이터베이스와의 상호작용을 담당하는 객체로, 데이터베이스 작업을 추상화하여 비즈니스 로직과 데이터 접근 로직을 분리하는 역할을 합니다. DAO 패턴을 사용하면 데이터베이스와의 상호작용을 캡슐화하고, 코드의 재사용성을 높이며, 유지보수를 쉽게 할 수 있습니다.
DAO의 주요 기능
-
CRUD 작업: 데이터베이스의 레코드에 대해 Create, Read, Update, Delete 작업을 수행합니다.
-
추상화: 데이터베이스 접근 로직을 추상화하여 비즈니스 로직과 분리합니다.
-
데이터 전송: 데이터베이스와 상호작용하여 데이터를 주고받습니다.
Public Interface와 Public Class의 차이를 살펴보시죠.
Public Interface
-
정의: DAO의 메소드를 정의합니다.
-
역할: 인터페이스는 DAO의 메소드 시그니처만 정의하며, 구현 클래스가 이러한 메소드를 구현하도록 강제합니다.
-
유연성: 다양한 구현체를 사용할 수 있도록 유연성을 제공합니다. 예를 들어, 데이터베이스 종류가 변경되더라도 인터페이스를 유지하고 구현체만 변경할 수 있습니다.
public interface UserDao {
void createUser(User user);
User getUserById(int id);
void updateUser(User user);
void deleteUser(int id);
}
Public Class
-
정의: 인터페이스에서 정의한 메소드를 실제로 구현합니다.
-
역할: 실제 데이터베이스와의 상호작용 로직을 구현합니다.
-
구현: 인터페이스를 구현하여 메소드를 오버라이드합니다.
public class UserDaoImpl implements UserDao {
// Database connection setup
@Override
public void createUser(User user) {
// Implementation code to insert user into database
}
@Override
public User getUserById(int id) {
// Implementation code to retrieve user from database by id
return null;
}
@Override
public void updateUser(User user) {
// Implementation code to update user in database
}
@Override
public void deleteUser(int id) {
// Implementation code to delete user from database by id
}
}
응용: MyBatis와 Mapper 어노테이션
@Mapper
는 MyBatis 프레임워크에서 사용되는 어노테이션으로, 인터페이스가 MyBatis 매퍼 파일과 연결된다는 것을 나타냅니다. MyBatis는 SQL 매핑 프레임워크로, XML 또는 어노테이션을 사용하여 SQL 쿼리를 매핑합니다.
-
자동 매핑: SQL 쿼리와 인터페이스 메소드를 자동으로 매핑합니다.
-
생산성 향상: XML이나 어노테이션을 사용하여 반복적인 SQL 코드를 줄일 수 있습니다.
-
유연성: 인터페이스 기반으로 SQL 쿼리를 관리하여 코드의 가독성과 유지보수성을 높입니다.
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
User getUserById(int id);
void createUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
List 어노테이션과 데이터 매핑
List는 Java의 컬렉션 프레임워크에 속하는 인터페이스로, 순서가 있는 요소들의 집합을 나타냅니다. MyBatis의 @List
어노테이션을 사용하면 SQL 쿼리의 결과를 List 형식으로 매핑할 수 있습니다. MyBatis는 이 어노테이션을 사용하여 데이터베이스 쿼리 결과를 Java 객체 리스트로 변환합니다.
package com.test.test1.test2.test3.test4.dao;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.test.test1.test2.test3.test4.vo.TEST_VO;
@Mapper
public interface TEST_DAO {
List<HashMap<String, ?>> selectTest(TEST_VO params);
}
이 메소드는 TEST_VO
객체를 매개변수로 받아 데이터베이스 쿼리 결과를 List<HashMap<String, ?>>
형식으로 반환합니다. 여기서 List는 결과가 여러 행일 수 있음을 나타내고, HashMap은 각 행의 컬럼 값을 매핑합니다.
결론
Java DAO 패턴을 사용하여 데이터베이스 접근 로직을 최적화하고, MyBatis와 Lombok을 통해 코드 작성 시간을 단축할 수 있습니다. 다양한 데이터베이스와의 유연한 통합을 위해 인터페이스 기반의 설계를 고려해보세요!