[ Java ] DTO / DAO 이해
DAO와 DTO는 소프트웨어 개발에서 데이터베이스와의 상호작용 및 데이터 전달을 담당하는 객체들을 지칭하는 용어다.
```DAO(Domain Access Object)```
· 데이터베이스와 직접적인 상호작용을 담당하는 객체
· 주로 데이터베이스에 접근하고 데이터를 읽거나 쓰는 작업을 수행 함(CRUD)
· DAO는 비즈니스 로직과 데이터베이스 접근 로직을 분리하기 위해 사용
· 데이터베이스 연결, 쿼리 실행, 트랜잭션 관리 등을 담당
```DTO(Data Transfer Object)```
· 데이터 전송을 목적으로 설계된 객체로, 데이터의 구조를 담고 있는 일종의 컨테이너
· 주로 비즈니스 로직 간에 데이터를 전달하거나, DB에서 조회한 결과를 비즈니스 로직으로 전달하는데 사용
· 필요한 데이터의 구조를 가지며, 주로 getter와 setter 메서드를 가진 단순한 구조를 가짐
DAO(Domain Access Object) | DTO(Data Transfer Object) | |
역할 및 목적 | 데이터베이스와 직접적인 상호작용 - 데이터베이스 관련 로직을 캡슐화 |
데이터 전송을 목적으로 하는 객체 - 간단한 구조, 비즈니스 로직 간의 데이터 전달에 사용 |
중점 | 데이터베이스와의 상호작용 | 데이터 전송 |
[ DAO 기본 구성 ]
public class EmployeeDao {
public Employee getEmployeeById(int employeeId) {
// 데이터베이스에서 직원 정보를 조회하는 로직
// ...
}
public void saveEmployee(Employee employee) {
// 데이터베이스에 직원 정보를 저장하는 로직
// ...
}
}
[ DTO 기본 구성 ]
public class EmployeeDto {
private int id;
private String name;
private String department;
// 각 필드에 대한 getter와 setter 메서드
// ...
// 다른 필요한 메서드들도 추가 가능
// ...
}
[예제 코드] - 고객정보 출력하기
- DTO/DAO를 사용하여 main 메소드를 간단하게 만들기
1. CustomoerDto.java
public class CustomerDto {
private int customerId;
private String customerName;
private String email;
// 생성자, getter, setter 등 필요한 메서드 추가
@Override
public String toString() { //기본 출력 형태 메소드
return "CustomerDto{" +
"customerId=" + customerId +
", customerName='" + customerName + '\'' +
", email='" + email + '\'' +
'}';
}
}
2. CustomerDao.java
import java.util.List;
public class CustomerDao {
private JdbcHelper jdbcHelper;
public CustomerDao() {
this.jdbcHelper = new JdbcHelper();
}
public List<CustomerDto> getAllCustomers() {
String sql = "SELECT * FROM customer";
return jdbcHelper.query(sql, new CustomerMapper());
}
// 다른 필요한 데이터베이스 연산 메서드들 추가
}
(+) 필요하고, 재활용하는 코드들을 메소드로 정리하여 저장
3. CustomerMapper.java
- RowMapper 상속 받음
public class CustomerMapper implements RowMapper<CustomerDto> {
@Override
public CustomerDto mapRow(ResultSet resultSet) throws SQLException {
CustomerDto customer = new CustomerDto();
customer.setCustomerId(resultSet.getInt("customer_id"));
customer.setCustomerName(resultSet.getString("customer_name"));
customer.setEmail(resultSet.getString("email"));
return customer;
}
}
(+) 데이터베이스에 있는 데이터 정보를 불러와주는(매핑) 클래스
4. Main.java
import java.util.List;
public class Main {
public static void main(String[] args) {
CustomerDao customerDao = new CustomerDao();
List<CustomerDto> customers = customerDao.getAllCustomers();
if (customers.isEmpty()) {
System.out.println("No customers found.");
} else {
System.out.println("Customer list:");
for (CustomerDto customer : customers) {
System.out.println(customer);
}
}
}
}
(+) 객체를 생성하여 사용.
(+) 고객 정보가 있는 경우와 없는 경우를 조건식으로 구현
++ 찾아보니 VO까지 한 번에 비교하는 글이 많던데.. 😢 일단 이 두 가지만 비교 공부했다..
개인 공부 기록용 입니다:)