'디자인 패턴'에 해당하는 글 1건

DAO Pattern

Programming/Java 2018. 12. 7. 00:38

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
손가락귀신
정신 못차리면, 벌 받는다.

,