interface Page<T> : Slice<T> {
val totalElements: Long // 전체 데이터 개수
val totalPages: Int // 전체 페이지 수
val number: Int // 현재 페이지 번호
val numberOfElements: Int // 현재 페이지의 데이터 개수
val content: List<T> // 실제 데이터
val sort: Sort // 정렬 정보
}
interface Slice<T> {
val content: List<T> // 실제 데이터
val number: Int // 현재 페이지 번호
val size: Int // 요청한 페이지 크기
val sort: Sort // 정렬 정보
val hasNext: Boolean // 다음 페이지 존재 여부
}
Page<T> 는 페이지의 모든 정보를 보여주고 있고, Slice<T> 는 다음 페이지 존재 여부만 알려주고 있다.
Page<T> 는 추가로 COUNT 쿼리를 실행한다.
- Page 사용:
- 전통적인 페이지네이션 UI (1,2,3,... 페이지 번호)
- 총 데이터/페이지 수가 필요한 경우
- Slice 사용:
- 무한 스크롤
- "더보기" 버튼
- 대용량 데이터 처리
- 성능이 중요한 경우