DAO(Data Access Object) 디자인 패턴은 비즈니스 계층에서 퍼시스턴스 계층을 분리하는데 사용되는 구조적 패턴이다.
쉽게말해 퍼시스턴스(Persistence) 계층... DB 의 데이터 처리(CRUD) 부분을 분리하여 계층간에 복잡성을 숨기는데 필요하다.
이 때 필요한건 세가지 이다.
- Model Object : DAO 클래스에서 검색된 데이터를 저장하는 get/set 메소드가 포함된 간단한 POJO 이다. (Damain Class / Value Object 라고도 함.)
- DAO Interface : 모델 객체에서 수행할 표준 연산을 정의한다.
- DAO Class : 인터페이스를 구현한 클래스로서 DataSource 에서 데이터를 가져와야 한다.
아래 예는 학번과 이름으로 학생들을 관리하는 프로그램 예제이다.
1. Model Object
Student.java
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; } } | cs |
위 예에서 처럼 Student 클래스는 속성과 getter/setter 만 포함되고 별다른 로직을 갖지 않은 순수한 데이터 객체이다.
이것을 흔히들 Model Object / Damain Class / DTO(Data Transfer Object) / VO(Value Object) 등으로 혼용하여 부른다.
2. DAO Interface
StudentDao.java
import java.util.List; public interface StudentDao { public List<Student> getAllStudents(); public Student getStudent(int rollNo); public void updateStudent(Student student); public void deleteStudent(Student student); } | cs |
CRUD 관련한 인터페이스를 작성하였다..
3. Class implementing interface
StudentDaoImpl.java
import java.util.ArrayList; import java.util.List; public class StudentDaoImpl implements StudentDao { List<Student> students; public StudentDaoImpl(){ students = new ArrayList<Student>(); Student student1 = new Student("Robert",0); Student student2 = new Student("John",1); students.add(student1); students.add(student2); } @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); } @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()); } } | cs |
DAO 인터페이스를 구현하여 비즈니스 계층과의 연결고리를 만들었다.
이제 이 객체만을 생성하여 CRUD 를 사용하면 되겠다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,