Java Design Pattern - Data Access Object Pattern
업데이트:
Design Pattern
- 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
- 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.
Data Access Object Pattern
- DAO 패턴이라고도 불린다.
- API 또는 작업에 액세스하는 하위 수준의 데이터를 상위 수준의 비즈니스 서비스에서 분리하는 데 사용된다.
Example
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;
}
}
- Student DTO객체를 정의한다.
public interface StudentDao {
public List<Student> getAllStudents();
public Student getStudent(int rollNo);
public void updateStudent(Student student);
public void deleteStudent(Student student);
}
public class StudentDaoImpl implements StudentDao {
// List is working as a database.
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());
System.out.println("Student: Roll No " + student.getRollNo() + ", deleted from database");
}
// Retrieve list of students from the 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() + ", updated in the database");
}
}
- Student 관련 기능을 제공할 StudentDao 인터페이스를 정의하고, 세부 기능을 구현한 StudentDaoImpl 클래스를 정의한다.
public class DaoPatternMain {
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("Michael");
studentDao.updateStudent(student);
// Get the student.
studentDao.getStudent(0);
System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
}
}
- StudentDao를 활용하여 기능을 수행해본다.
Source
Sample Code는 여기에서 확인 가능합니다.
댓글남기기