today_is

[ java ] 페이징(paging) 알고리즘 본문

java

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

ye_rang 2023. 11. 7. 19:54

오늘의 목표

 

웹 페이지 하단에 나오는 게시글 개수에 따른 페이지를 출력해보자.

 

 

 

공부하는 이유 

 

웹을 구현하기 위해서는 다양한 기능을 알고 있어야 한다.

특히나, 페이지를 출력하는 코드는 기초 중에서도 아주 기초에 속하기 때문에 

기본기부터 다져보자

 

 


 

 step 0 

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

 

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

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

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

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

                                       

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

요청 페이지 : 3 페이지

                                              

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

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

 

 

 

 step 1 

Random()  생성

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

 

 

 step 2 

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

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



//  게시글 개수에 따른 총 페이지 개수
int pageCount = board / 10;	// 페이지 개수 = 전체 게시글 / 한 페이지당 출력할 게시글 개수 
	
   if (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 10
2 page 11 18 ( ==  총 게시글 개수)

 

 

 step 3 

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

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

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

 

 

 

 step 4 

서식에 맞게 출력하기 

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

 


 

study_Review

 

가장 어려웠던 부분 : 3단계 (계속 변하는 값을 처리해주기) 

 

처음에는 단번에 코드의 규칙성이 보이지 않아,

직접 표를 작성해보았다.

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

 

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

                                

 

실제로 작성한 표를 첨부해놓겠다 !!!!

 

정말 별거 없어보이지만 규칙성을 찾기 위해서는 이 방법이 최고다 !!

 

'java' 카테고리의 다른 글

[ loop ] for, while 반복문  (0) 2023.11.20
[ control ] if ~ else , switch case  (0) 2023.11.17
[ array ] 중복 제거한 난수 생성하기 (로또번호 추첨)  (0) 2023.11.16
[ collection ]  (0) 2023.11.16
[ java ] 객체지향 언어, java  (0) 2023.11.03