본문 바로가기

내일배움캠프 4기 스프링/프로젝트📙

심화 프로젝트 간 어려웠던 페이징 처리

728x90

페이징 처리를 하기 전 설계를 리스트로 반환하는 방식으로 했지만, 추후 페이징 처리라는 말의 의미는 페이징 타입으로 반환하는 것이라는 것을 알게 되었고, 이에 맞춘 재설계 및 코드 재작성 단계를 거쳤다.

 

관리자 권한으로 접근할 수 있는 전체 판매자목록 조회 메서드

 

이를 통해 페이징 처리, 람다, Enum을 통한 권한 설정에 대해 보다 더 익숙해질 수 있었다.

 

트러블 슈팅

1. 참고 출처 :

 

스택 오버플로우

https://stackoverflow.com/questions/39036771/how-to-map-pageobjectentity-to-pageobjectdto-in-spring-data-rest

페이지네이션 

https://hudi.blog/spring-data-jpa-pagination/

람다

https://wikidocs.net/157858

 

07-06 함수형 프로그래밍

자바는 Java 8 버전부터 함수형 프로그래밍을 지원하기 위해 람다(Lambda)와 스트림(Stream)이 도입되었다. 람다와 스트림을 사용하면 요새 유행하는 함수형 프로그래밍 …

wikidocs.net

 

2. 트러블 슈팅 기록

01. 18

1) 리스트로 반환하는 조회 메서드 & 컨트롤러 코드를 작성하는 것에는 큰 문제 없이 작성했다.

2) 그러나 페이징 처리를 하지 않고 반환하여 이를 반영하고자 함

 

01. 19

페이징 처리의 종류에 대해 공부

 

01. 20

페이징 코드 작성 완료 :

리스트로 반환하지 않아도, 페이징 타입으로 반환하면 컨텐츠 부분에 리스트와 같은 형태로 값이 반환된다.

 

01. 21

맞닥뜨린 오류 :

map 메서드 및 람다를 사용해 응답 DTO에 값을 담아 반환하기 위해 해당 DTO를 생성할 때, map 메서드는 Function 타입을 필요로 하는데, 람다식의 출력 결과는 <method reference> 타입으로 출력된다.

~ map(SellerDetailResponse::new)로 작성한 경우 발생한 오류

 

원인 : 람다, 메소드 레퍼런스에 대한 이해 부족

참고한 글 :

https://codechacha.com/ko/java8-method-reference/

 

Java - 메소드 레퍼런스(Method Reference) 이해하기

메소드 레퍼런스(Method Reference)는 Lambda 표현식을 더 간단하게 표현하는 방법입니다. 메소드 레퍼런스는 사용하는 패턴에 따라 다음과 같이 분류할 수 있습니다. Static 메소드 레퍼런스, Instance 메

codechacha.com

메소드 레퍼런스 중 생성자 메서드 레퍼런스를 활용한 경우인데,

이 경우의 파라미터는 User 객체를 파라미터로 한다. 그러나 나는 그 객체를 파라미터로 하지 않고, 서비스 메서드에서 User 객체의 인스턴스를 조회하고 그 값을 Dto 생성자의 파라미터로 보낸 것이다.

~ 해결 예제

.map(user -> new SellerDetailResponse(user.getUsername(), user.getNickname(), user.getPhoneNum(), user.getSellerDetail()));

혹은 

public SellerDetailResponse(User user) {
    this.username = user.getuUsername();
    this.nickname = user.getNickname();
    this.phoneNum = user.getPhoneNum();
    this.sellerDetail = user.getSellerDetail();
}
한 후

map(SellerDetailResponse::new); 로 작성한 경우 문제 없음

 

728x90