DAO: Data Access Object
1. 정의
DB의 데이터에 접근하기 위한 객체
2. 역할
DB 접근을 위한 로직 및 비지니스 로직 분리 목적으로 사용
3. 특징
DB와 연결할 Connection까지 설정되어 있는 경우 많음
Ex) Mybatis 등 사용할 시, 커넥션풀까지 제공 ➡ 즉, 별도의 DAO 만드는 경우는 드묾
4. 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: Data Transfer Object
1. 정의
계층 간 데이터 교환 위한 자바 빈즈
Ex) Controller, View, Business Layer, Persistent Layer 등 각 계층 간 데이터 교환 위한 객체
2. 특징
- 로직 없는 순수 데이터 객체
- getter/setter 메소드만 가진 클래스
3. 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;
}
}
- 자바는 문법적으로 프로퍼티(Property, 데이터)를 제공하지 않음
➡ 지켜야 할 규약 존재 - getter/setter의 getWord()/setWord() 에서의 Word: 프로퍼티라고 약속
상기 클래스의 프로퍼티: name, age - 핵심) 프로퍼티: 멤버변수 name, age가 아닌, getter/setter의 메서드 뒤에 붙는 단어인 name, age
(즉, 멤버변수는 다른 이름으로 지어도 영향 X, getter/setter로 프로퍼티 표현) - 자바는 데이터 자동화 처리 위해 리플렉션 기법 사용, 이때 가장 중요한 것은 표준 규격
Ex) 상기 클래스 DTO의 프로퍼티인 name, age의 키값으로 들어온 데이터:
리플렉션 기법으로 setter 실행 ➡ 데이터 삽입 가능
(setter를 직접 요청 X, 눈에 보이지 않는 프레임워크 내부에서 setter가 실행됨) - 이러한 이유로 레이어 간 데이터 전달 시(특히 서버 ➡ 뷰로 이동) DTO 사용하면 매우 용이함
뷰의 form에서 name 필드 값을 프로퍼티에 맞춰 넘김
➡ 데이터를 받는 곳에서 name 속성의 이름과 매칭되는 프로퍼티에 자동으로 DTO가 인스턴스화 됨
➡ PersonDTO를 자료형의 값으로 받을 수 있음
즉, key-value 로 존재하는 데이터: 자동화 처리된 DTO로 변환되어 데이터가 세팅된 객체를 쉽게 받을 수 있음
VO: Value Object
1. 정의
값 객체, 즉, 값을 위해 쓰임
2. 특징
- 자바는 값 타입 표현을 위해 불변 클래스를 만들어 사용
- 불변 = readOnly
- getter기능만 존재
- 중간에 값 변경 불가 ➡ 새로 만들어야 함
3. VO vs DTO
1) 공통점
전달된 값을 getter 통해 사용
2) 차이점
- DTO: 가변적 클래스(setter 존재, 값 변경 가능)
- VO: 불변적 클래스(읽기 전용)
'Backend > Java' 카테고리의 다른 글
[IntelliJ] Interface 만들기 (0) | 2021.12.06 |
---|---|
[Eclipse] Java Build Path에서 Maven Dependencies 없을 때 (0) | 2021.11.22 |
[Java] About JVM, JRE, JDK (0) | 2021.11.17 |
[Eclipse] Tomcat의 Context path (root) 설정 (0) | 2021.11.08 |
[JSTL] select option 값 유지 (0) | 2021.11.03 |
댓글