DAO&DTO(=VO) 이해ㅔ하기
DAO(Data Access Object)
DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트.
- DB의 데이터에 액세스하는 트랜잭션 객체
- DB에 접근하기 위한 로직과, 비즈니스 로직을 분리하기 위해 사용
- 효율적인 커넥셔 관리와 보안성 때문에 사용.
- 사용자는 자신이 필요한 인터페이스를 DAO에게 요청하고, DAO는 이 인터페이스를 구현한 객체를 반환함.
- DB에 대한 접근을 DAO가 담당하도록 하여 DB Access를 DAO에서만 하게 하면, 다수의 원격 호출을 통한 오버헤드를 VO나 DTO를 통해 줄일 수 있고, 다수의 DB 호출문제 또한 해결할 수 있음.
- 단순 읽기만 하는 연산이므로 트랜잭션간의 오버헤드 감소 가능
예제
- DB와 연결할 Connection을 가져옴
- 어떤 DB를 사용할 것이며, 어떤 드라이브와 로그인 정보를 사용할 것인지 파악.
- 작업이 끝나면 사용한 리소스를 시스템에 돌려줌
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(Data Transfer Object)
-
계층간 데이터 교환을 위한 Java Beans.
- VO(Value Object)로도 바꾸어 표현할 수 있음.
- VO는 DTO와 동일한 개념이지만, Read Only 속성을 가짐.
- 보통 로직을 갖고 있지 않은 순수한 데이터 객체이며, 속성에 접근하기 위한 gettter, setter 메소드만 가짐
예제
public class TestDto {
private String name;
private int value;
private String data;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
참고
- https://jungwoon.github.io/common%20sense/2017/11/16/DAO-VO-DTO/
donate.html