✔️ DB의 데이터에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용
사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 Interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다.
직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.
MVC 패턴의 Model에서 이와 같은 일을 수행한다.
import java.util.Vector;
import javax.servlet.ServletContext;
public class StudentDAO {
private static ServletContext application;
public static void init(ServletContext application) {
StudentDAO.application = application;
}
public static Vector<Student> getAll() {
Vector<Student> list = (Vector<Student>)application.getAttribute("list");
if(list == null) {
list = new Vector<Student>();
application.setAttribute("list", list);
}
return list;
}
public static boolean insert(Student student) {
return getAll().add(student);
}
public static boolean delete(int s_id) {
Vector<Student> list = getAll();
Student s = getStudentById(s_id);
return list.remove(s);
}
public static Student getStudentById(int s_id) {
Vector<Student> list = getAll();
Student s = new Student(s_id);
int idx = list.indexOf(s);
Student target = null;
if(idx >= 0) {
target = list.get(idx);
}
return target;
}
public static boolean update(Student s) {
Vector<Student> list = getAll();
int idx = list.indexOf(s);
boolean flag = false;
if(idx >= 0) {
list.set(idx, s);
flag = true;
}
return flag;
}
public static Vector<Student> getStudentsByClass(String s_class) {
Vector<Student> list = getAll();
Vector<Student> result = new Vector<Student>();
for(Student s : list) {
if(s.getS_class().equals(s_class)) {
result.add(s);
}
}
return result;
}
public static Vector<Student> getStudentByName(String s_name) {
Vector<Student> list = getAll();
Vector<Student> result = new Vector<Student>();
for(Student s : list) {
if(s.getS_name().equals(s_name)) {
result.add(s);
}
}
return result;
}
}
✔️ 계층 간 데이터 교환을 위한 Java Beans 또는 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체
보통 로직을 가지고 있지 않다.
data와 그 data에 접근을 위한 getter, setter만 가지고 있다.
DB에서 data를 얻어 Service나 Controller등으로 보낼 때 사용하는 객체를 말함.
package kr.ac.jipark09;
public class StudentDTO {
private int id;
private String name;
private String tel;
private int grade;
private String group;
public StudentDTO(int id) {
setId(id);
}
public StudentDTO(String name, String tel, int grade, String group) {
setName(name);
setTel(tel);
setGrade(grade);
setGroup(group);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
}
✔️ 값 오브젝트로써 값을 위해 쓰이며, Read-Only특징을 가진다.
❗️ Read-Only
- 사용하는 도중에 변경 불가능하며 오직 읽기만 가능