· LANGUAGE/└ Java

[ Java ] DTO / DAO 이해

감자도리22 2024. 1. 29. 22:47

 

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까지 한 번에 비교하는 글이 많던데.. 😢 일단 이 두 가지만 비교 공부했다.. 

 

 

개인 공부 기록용 입니다:)

728x90