sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
관련된 클래스는 다음과 같다.
1. com.omnibuscode.util.board.paging.PagingDao.java
2. com.omnibuscode.util.board.paging.PagingHelper.java
3. com.omnibuscode.util.board.paging.PagingHelperImpl.java
4. com.omnibuscode.util.board.paging.PagingHelperImplDao.java

페이지 계산시 가장 핵심적인 변수는 다음과 같다.
2. 한 페이지당 표시할 리스트 갯수 (cPerPage)
3. 한 블럭당 표시할 페이지 갯수 (pPerBlock)
위의 변수가 설정이 되면 전체 페이지의 수(totalPage)와 전체 블럭의 수(totalBlock) 를 계산해 낼 수 있다.
그리고 사용자가 페이지 이동을 하게 되어 현재 표시하고 싶은 페이지(curPage)가 입력이 되면 현재 페이지가 속한 블럭(curBlock)을 계산해 낼 수 있다.
페이징에서 뽑아내야 할 값들은 위와 같으며 이 값들을 계산하게 도와줄 클래스는 PagingHelperImpl 클래스이다.
이 클래스는 사실 JDF(Java Development Framework) 에서 사용하는 페이징 도우미 클래스이다.
PagingHelper 인터페이스를 상속받아 실제 페이징 계산을 구현하고 결과물로 페이지 이동 링크 및 텍스트를 리턴하거나 현재 페이지의 목록을 리턴해 주는 메서드들을 제공해 준다.
하지만 이 클래스는 원래 설계 목적이 DAO 클래스에서 이 클래스를 상속받아 미리 정의해 놓은 탬플릿 메서드들을 이용하는 것이었다.
물론 그러한 방식에 있어서 별다른 문제점이 존재하는 것은 아니지만 상속을 통해 구현을 해야 하기 때문에 DAO클래스가 PagingHelper 클래스에 의존적이 될 수 밖에 없었다.
해서 PagingDao 인터페이스를 생성하고 PagingHelperImpl을 확장한 PagingHelperImplDao 클래스를 작성하였다.
DAO클래스가 PagingDao 인터페이스를 implements하고 이 클래스를 구현한 객체를 PagingHelperImplDao 클래스에 구성객체로 셋팅을 해주면 나머지는 PagingHelperImplDao 클래스가 알아서 계산하고 현재페이지의 리스트를 리턴해주도록 바꿔주었다.
이는 리스트를 뽑아오는데에 있어서 실행도중 DAO를 다른 객체로 교체하게 되면 리스트를 다르게 뽑아올 수 있다는 것을 의미한다.
여기에 적용된 패턴은 Template 메소드 패턴이고 상속이 아닌 구성을 통해서 DAO가 PagingHelperImplDao 클래스에게 의존적이지 않게 만들어준다.
Strategy패턴과 같이 PagingHelperImplDao 클래스에 전달하는 DAO 구성객체 따라서 실행시에 동적으로 리스트에 변화를 줄 수 있는 잇점을 얻을 수 있다.
개발자가 해주어야 할 것은, PagingDao를 implements하는 DAO클래스를 작성하고, 이를 PagingHelperImplDao 클래스의 setPagingDao(PagingDao pd) 메서드로 구성객체를 셋팅해주면
PagingHelper 인터페이스에 정의된 public 메서드들을 통해 페이징에 필요한 값들을 리턴 받을 수 있게 된다.
코드 예제는 다음과 같다.
- PagingHelper phd = new PagingHelperImplDao(req);
- phd.setPagingParams("/TestPagingProject/simplePagingTest", 20, 5); //RequestURI, ContentsPerPage, PagesPerBlock
- phd.setPagingDao(new SimplePagingDaoForMysqlImpl(args));
DAO의 생성자 파라미터로 전달받는 args 변수는 검색정보와 정렬정보등의 추가적인 파라미터들을 저장하고 있는 변수이다.