작성
·
166
0
매개변수로 cotent, pageable, countQuery::fetchOne 을 주셨는데요
세번째 매개변수가 잘 이해가되질않습니다.
그냥 countQuery.fetchOne이랑 다른건가요? 세미콜론이 해당클래스의 메서드아닌가요?
countQuery.fetchOne의 반환값은 Long이고 countQuery::fetchOne 의 반환값은 SupperierLong? 처음보는것이던데 뭐가다른건지 잘 모르겠습니다.
그리고 일반적인 웹사이트에서 화면이 대부분 페이지 형식으로 사용되니 repository 대부분 메서드도 페이지를 반환값으로 만들어야되는게 맞나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
정중한 개구리님, 질문에 답변 드리겠습니다.
countQuery.fetchOne
과 countQuery::fetchOne
의 차이점은 표현 방식의 차이입니다. countQuery.fetchOne
은 메소드를 직접 호출하는 방식이고, countQuery::fetchOne
은 메소드 참조 방식으로, Java 8에서 도입된 기능입니다. countQuery::fetchOne
을 사용하면 해당 메소드를 나중에 실행할 수 있는 참조를 넘길 수 있기 때문에, Supplier<Long>
인터페이스 타입으로 PageableExecutionUtils.getPage
메소드의 매개변수로 넘길 수 있습니다. 여기서 Supplier<T>
는 T get()
이라는 하나의 추상 메소드를 가진 함수형 인터페이스로, 추후 호출 시에 해당 메소드(fetchOne
여기서는)를 실행하고 그 결과를 반환하게 됩니다.
일반적으로 웹사이트에서 페이지 형식을 많이 사용하기 때문에, 데이터의 양이 많은 경우 효율적인 데이터 관리와 사용자 경험 향상을 위해 페이지네이션(pagination)을 구현하는 것이 좋습니다. 따라서, Spring Data JPA나 Spring Data JDBC 등의 Spring Data 프로젝트를 사용하여 데이터를 다룰 때, Page<T>
타입을 반환 값으로 사용하는 것이 일반적인 패턴입니다. Page<T>
를 반환하면, 반환된 페이지에 대한 정보(예: 전체 페이지 수, 현재 페이지의 데이터, 전체 데이터 수 등)를 제공하기 때문에 클라이언트 측에서 페이지네이션을 구현할 때 유용합니다.
이러한 방식으로 메소드를 설계하면, 백엔드에서는 데이터를 효율적으로 관리하면서 클라이언트 측에는 필요한 데이터와 페이지네이션에 필요한 정보를 제공할 수 있어, 효과적인 데이터 처리와 사용자 경험이 가능해집니다.