[Research] Dao, Dto, Vo

gimseonjin616·2021년 10월 19일
0

Research

목록 보기
4/8

DAO, DTO, VO의 차이점

DAO

Data Access Object 의 약자로 데이터베이스의 data에 접근하기 위한 객체

DataBase 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다.

DAO의 경우는 DB와 연결할 Connection 까지 설정되어 있는 경우가 많다.

그래서 현재 많이 쓰이는 Mybatis 등을 사용할 경우 커넥션풀까지 제공되고 있기 때문에 DAO를 별도로 만드는 경우는 드물다.

DAO 예제

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestDao {

    public void add(TestDto dto) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");

        PreparedStatement preparedStatement = connection.prepareStatement("insert into users(id,name,password) value(?,?,?)");


        preparedStatement.setString(1, dto.getName());
        preparedStatement.setInt(2, dto.getValue());
        preparedStatement.setString(3, dto.getData());
        preparedStatement.executeUpdate();
        preparedStatement.close();
        
        connection.close();

    }
}

DTO

DTO(Data Transfer Object) 는 계층간 데이터 교환을 위한 객체

여기서 말하는 계층간의 의미는 Controller, View, Business Layer, Persistent Layer 등을 말하며 각 계층간 데이터 교환을 위한 객체를 의미한다.

DTO는 로직을 가지지 않는 순수한 데이터 객체이고 getter, setter 메소드만 가진 클래스를 의미한다.

DTO 예제

public class PersonDTO {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

VO

VO(Value Object) 값 오브젝트로써 값을 위해 쓰이는 객로 불변이라는 것은 readOnly 특징을 가진다.

VO는 값 오브젝트로써 값을 위해 쓰인다. 자바는 값 타입을 표현하기 위해 불변 클래스를 만들어서 사용하는데, 불변이라는 것은 readOnly 특징을 가진다.

이러한 클래스는 중간에 값을 바꿀 수 없고 새로 만들어야 한다는 특징이 있다

예를들어 Color클래스를 보면 Red를 표현하기 위해 Color.RED 등을 사용하며 getter기능만이 존재한다.

DTO vs VO

DTO와 VO의 공통점은 넣어진 데이터를 getter를 통해 사용하므로 주 목적은 같다. 그러나 DTO의 경우는 가변의 성격을 가진 클래스 이다(setter 활용). 그에반해 VO는 불변의 성격을 가졌기에 차이점이 있다.

시스템 흐름

참고
[JAVA] DAO, DTO, VO 차이

profile
to be data engineer

0개의 댓글