현재 게시물을 페이징 처리하는 ResponseDto를 Post만 처리하는 Dto가 아닌 제네릭 클래스로 만들어서 Post뿐만이 아니라 다른 곳에서도 쓰일 수 있게 하면 어떨까?? 라는 피드백을 받았는데 제네릭클래스를 아예 생각지도 못하고 있었던 나는 머리를 한대 맞은 기분이였다 왜 제네릭으로 만들 생각을 못했지... ?? 아무튼 그래서 한번 제네릭 클래스로 한번 만들어 봤습니다.
기존 PostPagingResponseDto
기존에는 이름부터 PostPaging으로 오직 게시물만을 위한 페이징 Dto였다..
@Getter
public class PostPagingResponseDto {
private final Long id;
private final String content;
private final LocalDateTime createdAt;
private final LocalDateTime updatedAt;
private final UserResponseDto writer;
private final int size;
private final int page;
private final int totalPages;
private final Long totalElements;
public PostPagingResponseDto(Post post, int page, int size, int totalPages, Long totalElements) {
this.id = post.getId();
this.content = post.getContent();
this.createdAt = post.getCreatedAt();
this.updatedAt = post.getUpdatedAt();
this.writer = new UserResponseDto(post.getUser());
this.page = page;
this.size = size;
this.totalPages = totalPages;
this.totalElements = totalElements;
}
}
제네릭 클래스로 바꾼 PagingResponseDto
List로 받는 이유는 게시물을 예를 들면 하나만 가져오는 것이아니라 여러개의 게시물을 가져오는 것이기 때문에 먼저 리스트형식으로 바꾼 뒤 그 리스트를 생성자를 이용하여 PagingResponseDto 객체를 반환해준다.
@Getter
public class PagingResponseDto <T>{
private final List<T> contents;
private final int size;
private final int page;
private final int totalPages;
private final Long totalElements;
public PagingResponseDto(List<T> contents, int page, int size, int totalPages, Long totalElements) {
this.contents = contents;
this.page = page;
this.size = size;
this.totalPages = totalPages;
this.totalElements = totalElements;
}
}
// 서비스 로직
public PagingResponseDto<PostResponseDto> findAllPosts(Pageable pageable) {
Page <Post> posts = postRepository.findAll(pageable);
List<PostResponseDto> res = posts.map(PostResponseDto::new).toList();
return new PagingResponseDto<>(res,pageable.getPageNumber()+1, pageable.getPageSize(), posts.getTotalPages(), posts.getTotalElements());
}
실행결과
잘나온다~~~!!
앞으로도 Dto나 클래스들을 만들 때 그냥 아무생각 없이 만들지 않고 이 클래스를 여러 곳에서 쓰임이 있을까? 있다면 어떻게 설계를 해야할까 라는 고민을 하면서 개발을 해야겠다는 생각이 많이 들었다 알면 알수록 어렵다 개발....
'TIL' 카테고리의 다른 글
기능 개선 과제 (0) | 2024.10.31 |
---|---|
Todo 프로젝트 리팩토링 하기 (0) | 2024.10.30 |
REST, REST API, RESTful (2) | 2024.10.21 |
JPA - 일정관리 앱 만들기 (1) | 2024.10.17 |
JPA - 회원가입 로그인 (0) | 2024.10.17 |