DAO는 데이터 접근 객체(Data Access Object)의 약어입니다. DAO 디자인 패턴은 데이터 영속성 로직을 별도의 계층으로 분리하는 데 사용됩니다. 이렇게 하면 서비스는 데이터베이스 액세스의 저수준 작업이 어떻게 이루어지는지 완전히 알지 못합니다. 이것은 로직의 분리 원칙으로 알려져 있습니다.
DAO 디자인 패턴
DAO 디자인 패턴을 사용하면 다음과 같은 구성 요소가 필요합니다:
- 모델은 한 계층에서 다른 계층으로 전달됩니다.
- 인터페이스는 유연한 설계를 제공합니다.
- 인터페이스 구현은 영속성 로직의 구체적인 구현입니다.
DAO 패턴 구현
위에서 언급한 구성 요소를 사용하여 DAO 패턴을 구현해 봅시다. 여기서 3개의 구성 요소를 사용할 것입니다:
Book
모델은 한 계층에서 다른 계층으로 전달됩니다.BookDao
인터페이스는 유연한 설계와 API를 제공합니다.BookDaoImpl
은BookDao
인터페이스의 구현체입니다.
이 로직을 다이어그램으로 표현해 봅시다:
DAO 패턴 모델 클래스
이제 모델 객체를 생성해 봅시다.
package com.journaldev.model;
public class Books {
private int isbn;
private String bookName;
public Books() {
}
public Books(int isbn, String bookName) {
this.isbn = isbn;
this.bookName = bookName;
}
// getter setter 메소드
}
이 객체는 간단하게 유지하기 위해 2개의 속성만 가지고 있습니다.
DAO 패턴 인터페이스
이제 데이터에 대한 영속성 수준에서 액세스하기 위한 인터페이스를 정의해 봅시다.
package com.journaldev.dao;
import com.journaldev.model.Books;
import java.util.List;
public interface BookDao {
List<Books> getAllBooks();
Books getBookByIsbn(int isbn);
void saveBook(Books book);
void deleteBook(Books book);
}
DAO 패턴 구현
다음으로, 위의 인터페이스를 구현하는 구체적인 클래스를 생성합니다.
package com.journaldev.daoimpl;
import com.journaldev.dao.BookDao;
import com.journaldev.model.Books;
import java.util.ArrayList;
import java.util.List;
public class BookDaoImpl implements BookDao {
//리스트는 데이터베이스로 동작합니다
private List books;
public BookDaoImpl() {
books = new ArrayList<>();
books.add(new Books(1, "Java"));
books.add(new Books(2, "Python"));
books.add(new Books(3, "Android"));
}
@Override
public List getAllBooks() {
return books;
}
@Override
public Books getBookByIsbn(int isbn) {
return books.get(isbn);
}
@Override
public void saveBook(Books book) {
books.add(book);
}
@Override
public void deleteBook(Books book) {
books.remove(book);
}
}
DAO 패턴 사용
마침내, 우리는 main() 메서드에서 이 구현을 사용합니다:
package com.journaldev;
import com.journaldev.dao.BookDao;
import com.journaldev.daoimpl.BookDaoImpl;
import com.journaldev.model.Books;
public class AccessBook {
public static void main(String[] args) {
BookDao bookDao = new BookDaoImpl();
for (Books book : bookDao.getAllBooks()) {
System.out.println("Book ISBN : " + book.getIsbn());
}
//학생 업데이트
Books book = bookDao.getAllBooks().get(1);
book.setBookName("Algorithms");
bookDao.saveBook(book);
}
}
DAO 패턴의 장점
DAO 패턴을 사용하는 것에는 여러 가지 장점이 있습니다. 여기에 일부를 언급해 봅시다:
- 영속성 메커니즘을 변경하는 동안 서비스 레이어는 데이터가 어디에서 오는지 알 필요가 없습니다. 예를 들어, MySQL에서 MongoDB로 전환하려는 경우, 변경 사항은 DAO 레이어에서만 필요합니다.
- DAO 패턴은 애플리케이션의 다른 구성 요소 간의 낮은 결합도에 중점을 둡니다. 따라서 View 레이어는 DAO 레이어에 의존하지 않으며, 서비스 레이어만 인터페이스를 통해 의존합니다. 실제 구현에서는 의존하지 않습니다.
- 영속성 로직이 완전히 분리되므로 개별 구성 요소에 대한 단위 테스트 작성이 훨씬 쉽습니다. 예를 들어, JUnit과 Mockito를 사용하는 경우, 애플리케이션의 개별 구성 요소를 모의할 수 있습니다.
- DAO 패턴에서는 인터페이스와 함께 작업하기 때문에 “구현이 아닌 인터페이스와 함께 작업”하는 스타일을 강조합니다. 이는 우수한 객체 지향 프로그래밍(OOP) 스타일입니다.
DAO 패턴 결론
이 기사에서는 DAO 디자인 패턴을 사용하여 지속성 로직을 분리하고 컴포넌트를 느슨하게 결합하는 방법을 배웠습니다. 디자인 패턴은 프로그래밍 방식에 기반을 둔 것이며, 언어와 프레임워크에 독립적입니다. 아래 링크에서 DAO 예제 프로젝트를 다운로드하십시오.
Source:
https://www.digitalocean.com/community/tutorials/dao-design-pattern