[Java] 페이징(paging) 처리 알고리즘

2024. 10. 4. 00:37Java

게시판 등의 페이지를 구현할 때, 일정 수가 넘어가면 다음 페이지로 넘어가게 처리하는

페이징(paging) 알고리즘에 대해서 공부해보자.

 


 

Step0

구현하고자 하는 부분을 파악하기

 

랜덤값으로 전체 게시글의 개수를 생성하여

1페이지 당 10개의 게시글이 나오게 출력한다.

또한 랜덤값으로 "요청 페이지"를 생성하여

요청 페이지에서의 시작 페이지와 끝 페이지를 출력한다

 

ex) 전체 페이지 : 9 페이지

요청 페이지 : 3 페이지

 

출력값 >> 페이지 시작번호 : 31

페이지 끝 번호 : 40 (41번 부터는 4페이지이기 때문)

 

Step1

Random() 생성

Random ran = new Random();		// 전체 게시글 개수와 요청 페이지를 랜덤으로 생성할 Random()

 

 

Step2

필요한 변수 선언 및 예외상황 처리

//  전체 게시글 개수
int board = ran.nextInt(100) + 1;	//  전체 게시글 개수 = ran.int입력값(범위) + 시작값
					//  1 ~ 100 사이의 값 


//  게시글 개수에 따른 총 페이지 개수
int pageCount = board / 10;	// 페이지 개수 = 전체 게시글 / 한 페이지당 출력할 게시글 개수 
 (board % 10 > 0) {	// 만약, 나머지가 있다면 
	 pageCount += 1;	// 페이지 1장 더 추가 
   }
     
    
//  요청한 페이지
int page = ran.nextInt(pageCount) + 1;	 //  요청 페이지 = 전체 페이지 중에서 랜덤으로 값 생성

 

추가 설명

if (board % 10 > 0) {

pageCount += 1;

}

 

ex) 18개의 게시글을 10개당 1개의 페이지로 출력한다고 가정해 보자.

 

pageCount = 전체 게시글을 10으로 나눈 몫을 값으로 사용하기 때문에

18 / 10 == 1 이므로 2페이지 자체가 출력되지 않는다.

 

따라서 18 % 10 > 0 (==true) 라면

나머지 11 ~ 18 페이지를 출력하기 위해서

총 페이지 개수를 +1

페이지 시작 번호 끝 번호
1 page 1 10
2 page 11 18 (== 총 게시글 개수)

 

Step3

상황에 따라 계속 변해야하는 변수들을 처리해주기

// 페이지마다 변하는 페이지 시작 번호
int begin = page * 10 - 9;			

// 페이지 끝 번호
int end = begin + 9;
		
   if (page == (board / 10) + 1) {		//	마지막 페이지의 끝 번호에 대한 조건
      end = begin + board % 10 - 1;		//	이 조건이 없으면 총 게시글은 18개인데 
						//	끝번호가 18 이상으로 나옴 
   }

 

Step4

서식에 맞게 출력하기

System.out.printf(
		  "전체 게시글 %3d, 총 페이지 %2d , 요청 페이지 %2d , 시작 %2d , 끝 %3d", 
		  board, pageCount, page, begin, end);

 

 


 

개인적으로 나는 3단계 부분이 처음에 가장 이해가 잘 되지 않았다.

처음에는 코드의 규칙성이 잘 보이지 않아서, 직접 표를 작성해 보았다.

확실히 표를 통해 한눈에 보았더니, begin과 end 변수의 값이 일정한 규칙에 따라 변화함을 캐치할 수 있었다.

 

또한, 하나의 문제를 단계적으로 나누어서 접근했더니 더 수월하게 풀 수 있었다.