· DAO(Data Access Object) 패턴은 비즈니즈 로직과 DB를 분리하기 위해 사용하는 패턴이다.
· DAO를 만들어서 DB의 접근을 전담하게 만들고,
DB를 사용하는 방법이 변경되더라도 클라이언트 로직이 변경되지 않도록 DB 로직을 캡슐화하여 분리한다.
· J2EE 디자인 패턴 중 한 종류다. https://scshim.tistory.com/448
· DAO 패턴은 다음 요소들을 포함한다.
- Data Access Object Interface: 모델 객체에서 수행할 표준 작업을 정의하는 인터페이스
- Data Access Object concrete class: 위의 인터페이스를 구현하는 클래스다. 데이터소스에서 데이터를 가져오는 역할을 한다.
데이터소스는 데이터베이스, xml 또는 다른 저장 매커니즘이 될 수 있다.
- Model Object or Value Object: DAO 클래스를 사용하여 검색된 데이터를 저장하기 위한 get/set 메서드를 포함하는
간단한 POJO 객체다.
Data Access Object Pattern 사용하기
Data Access Object Pattern의 UML 다이어그램은 다음과 같다.
- Student: 모델 또는 값 객체 역할
- StudentDao: DAO Interface
- StudentDaoImpl: DAO Interface의 구체 클래스
- DaoPatternDemo: StudentDao를 사용하여 DAO 패턴의 사용을 보여준다.
1. 값 객체를 만든다.
public class Student {
private String name;
private int rollNo;
Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
}
2. DAO 인터페이스를 만든다.
public interface StudentDao {
public List<Student> getAllStudents();
public Student getStudent(int rollNo);
public void updateStudent(Student student);
public void deleteStudent(Student student);
}
3.인터페이스를 구현하는 구체 클래스를 만든다.
public class StudentDaoImpl implements StudentDao{
// 데이터베이스로 사용되는 리스트
List<Student> students;
public StudentDaoImpl(){
students = new ArrayList<Student>();
Student student1 = new Student("영수",0);
Student student2 = new Student("철수",1);
students.add(student1);
students.add(student2);
}
@Override
public void deleteStudent(Student student) {
students.remove(student.getRollNo());
System.out.println("Student: Roll No " + student.getRollNo() + ", deleted from database");
}
@Override
public List<Student> getAllStudents() {
return students;
}
@Override
public Student getStudent(int rollNo) {
return students.get(rollNo);
}
@Override
public void updateStudent(Student student) {
students.get(student.getRollNo()).setName(student.getName());
System.out.println("Student: Roll No " + student.getRollNo() + ", 데이터베이스가 변경되었습니다.");
}
}
4. StudentDao를 통해 DAO 패턴을 사용하는 방법을 보여준다.
public class DaoPatternDemo {
public static void main(String[] args) {
StudentDao studentDao = new StudentDaoImpl();
//print all students
for (Student student : studentDao.getAllStudents()) {
System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
}
//update student
Student student =studentDao.getAllStudents().get(0);
student.setName("민수");
studentDao.updateStudent(student);
//get the student
studentDao.getStudent(0);
System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
}
}
출력 결과
'자바' 카테고리의 다른 글
J2EE 디자인 패턴 - Session Facade Pattern (0) | 2021.12.06 |
---|---|
[Java] if-else vs switch, 조건문의 속도 차이와 그 이유 (0) | 2021.12.05 |
J2EE 디자인 패턴이란? (0) | 2021.12.03 |
J2EE 디자인 패턴 - Business Delegate Pattern (0) | 2021.12.03 |
[Java] 자바 8에 추가/변경된 사항 (0) | 2021.09.29 |
댓글