2024. 10. 4. 00:37ㆍJava
게시판 등의 페이지를 구현할 때, 일정 수가 넘어가면 다음 페이지로 넘어가게 처리하는
페이징(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 변수의 값이 일정한 규칙에 따라 변화함을 캐치할 수 있었다.
또한, 하나의 문제를 단계적으로 나누어서 접근했더니 더 수월하게 풀 수 있었다.
'Java' 카테고리의 다른 글
[Java] 자바의 조건문 if ~ else, switch case (0) | 2024.10.04 |
---|---|
[Java] Array - 중복 제거된 난수 생성하기 feat.로또번호 (0) | 2024.10.04 |
[Java] collection(List, Set, Map) (1) | 2024.10.04 |
[Java] 변수의 종류 (0) | 2024.10.03 |
[Java] Java, 객체지향 언어 (0) | 2023.12.13 |