웹사이트 검색

DAO 디자인 패턴


DAO는 데이터 액세스 개체를 나타냅니다. DAO 디자인 패턴은 별도의 계층에서 데이터 지속성 논리를 분리하는 데 사용됩니다. 이러한 방식으로 서비스는 데이터베이스에 액세스하기 위한 하위 수준 작업이 수행되는 방식에 대해 완전히 비밀로 유지됩니다. 이것은 논리 분리의 원리로 알려져 있습니다.

DAO 디자인 패턴

DAO 디자인 패턴을 사용하면 디자인이 의존하는 다음 구성 요소가 있습니다.

  • 한 레이어에서 다른 레이어로 전송되는 모델입니다.
  • 유연한 디자인을 제공하는 인터페이스
  • 지속성 논리의 구체적인 구현인 인터페이스 구현

DAO 패턴 구현

위에서 언급한 구성 요소를 사용하여 DAO 패턴을 구현해 보겠습니다. 여기서는 3가지 구성 요소를 사용합니다.

  1. 한 레이어에서 다른 레이어로 전송되는 Book 모델입니다.
  2. 구현할 수 있는 유연한 디자인과 API를 제공하는 BookDao 인터페이스
  3. 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 methods
}

단순함을 유지하기 위해 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 {

    //list is working as a database
    private List<Books> 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<Books> 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());
        }

        //update student
        Books book = bookDao.getAllBooks().get(1);
        book.setBookName("Algorithms");
        bookDao.saveBook(book);
    }
}

DAO 패턴의 장점

DAO 패턴을 사용하면 많은 이점이 있습니다. 여기에 그 중 일부를 명시해 보겠습니다.

  1. 지속성 메커니즘을 변경하는 동안 서비스 계층은 데이터의 출처를 알 필요조차 없습니다. 예를 들어 MySQL 사용에서 MongoDB로 전환하려는 경우 모든 변경은 DAO 계층에서만 수행해야 합니다.
  2. 응용 프로그램의 서로 다른 구성 요소 간의 낮은 결합에 대한 DAO 패턴 강조. 따라서 View 레이어는 DAO 레이어에 종속되지 않고 서비스 레이어만 DAO 레이어에 종속되며 구체적인 구현이 아닌 인터페이스가 있는 경우에도 마찬가지입니다.
  3. 지속성 논리가 완전히 분리되어 있으므로 개별 구성 요소에 대한 단위 테스트를 작성하는 것이 훨씬 쉽습니다. 예를 들어 JUnit 및 Mockito를 사용하여 프레임워크를 테스트하는 경우 애플리케이션의 개별 구성 요소를 모킹하기가 쉽습니다.
  4. DAO 패턴에서 인터페이스로 작업할 때 우수한 OOP 스타일의 프로그래밍인 "구현 대신 인터페이스로 작업\하는 스타일도 강조합니다.

DAO 패턴 결론

이 기사에서는 DAO 디자인 패턴을 사용하여 지속성 논리를 분리하여 구성 요소를 느슨하게 결합하는 것을 강조하는 방법을 배웠습니다. 디자인 패턴은 프로그래밍 방식을 기반으로 하므로 언어와 프레임워크에 독립적입니다. 아래 의견에 의견을 남겨주십시오. 아래 링크에서 DAO 예제 프로젝트를 다운로드합니다.

DAO 패턴 예제 프로젝트 다운로드

참조: 위키백과.