해당 글은 속닥속닥 기술블로그에 작성된 글과 동일합니다.
코드
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
Slice<Post> findSliceBy(Pageable pageable);
Page<Post> findPostsByMemberOrderByCreatedAtDesc(Pageable pageable, Member member);
}
우리 코드는 원래 Slice를 이용해 페이징 했다.

그런데 이번에 "내가 쓴 글 조회" API는 총 페이지 수도 필요로 했다.
찾아보니
Page를 통해 기존Slice기능과 더불어,총 페이지 수도 알 수 있었다.
다만 Page 는 생성 비용이 Slice 보다 많이 드므로
총 페이지 수를 알 필요 없다면Slice를 쓰면 될 것 같다.
Page 인터페이스보다시피, Slice 인터페이스를 상속한다
public interface Page<T> extends Slice<T> {
// 전체 페이지 개수
int getTotalPages();
// 전체 요소 개수
long getTotalElements();
// / 변환기
<U> Page<U> map(Function<? super T, ? extends U> converter); // 변환기
}
Slice 인터페이스public interface Slice<T> extends Streamable<T> {
int getNumber(); // 현재 페이지
int getSize(); // 페이지 크기
int getNumberOfelements(); // 현재 페이지에 나올 데이터 수
List<T> getContent(); // 조회된 데이터
boolean hasContent(); // 조회된 데이터 존재 여부
Sort getSort(); // 정렬 정보
boolean isFirst(); // 현재 페이지가 첫 번째 페이지인지 여부
boolean isLast(); // 현재 페이지가 마지막 페이지인지 여부
boolean hasNext(); // 다음 페이지 여부
boolean hasPrevious(); // 이전 페이지 여부
Pageable getPageable(); // 페이지 요청 정보
Pageable nextPageable(); // 다음 페이지 객체
Pageable previousPageable(); // 이전 페이지 객체
<U> Slice<U> map(Function<? super T, ? extends U> convert); // 변환기
}
쿼리의 매개변수를 처리하려면 앞의 예에서 이미 본 것처럼 메서드 매개변수를 정의하십시오. Pageable그 외에도 인프라는 및 와 같은 특정 유형을 인식 Sort하여 쿼리에 페이지 매김 및 정렬을 동적으로 적용합니다. 다음 예에서는 이러한 기능을 보여줍니다.
예 14. 쿼리 메서드에서 Pageable, Slice, List 사용
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Sort sort);
List<User> findByLastname(String lastname, Pageable pageable);
Pageable 인스턴스를 쿼리 메서드에 전달하여 정적으로 정의된 쿼리에 페이징을 동적으로 추가할 수 있습니다.
Page는 사용 가능한 요소의 개수와 페이지의 개수를 알고 있습니다.
Slice를 리턴하세요.Slice는 다음 Slice가 사용 가능한지 여부만 알고 있으며, 이는 더 큰 결과 집합을 탐색할 때 충분할 수 있습니다.
Pageable인스턴스 를 통해 처리할 수 있습니다.Sort매개변수를 추가하십시오.보시다시피 List 리턴도 가능합니다. 이 경우 실제 Page 인스턴스를 구축하는 데 필요한 추가 메타데이터가 생성되지 않습니다. 즉, 추가 count 쿼리가 실행되지 않습니다. 주어진 엔터티 범위만 조회하도록 쿼리를 제한합니다.
[Spring Docs]#repositories.special-parameters
[Stackoverflow] Page<> vs Slice<> when to use which?
https://wonit.tistory.com/483