본문 바로가기
자바

J2EE 디자인 패턴 - Data Access Object Pattern

by 책 읽는 개발자_테드 2021. 12. 5.
반응형

· 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() + " ]");
   }
}

  

 

출력 결과

반응형

댓글