마트철수

[050] 페이지네이션 + TodoApp 구현하기 본문

KB IT's Your Life/교육

[050] 페이지네이션 + TodoApp 구현하기

마트스 2024. 7. 18. 17:51

 

2024.07.18(목)
 
MySQL 7일차 (마지막)
 

TodoApp 제작하면서 DAO에 대해 한 차례 더 복습해 볼 수 있었다.

코드를 구현하면서 불편했던 점에 대해 생각해보라 하셨는데,

그 부분을 Spring으로 해결 가능한 부분인 것 같다.


 
이것이 MySQL이다
 

PART01 MySQL 설치 및 DB 구축과정 미리 실습하기

  • CH01 DBMS 개요와 MySQL 소개
  • CH02 MySQL 설치
  • CH03 MySQL 전체 운영 실습

PART02 MySQL 기본

  • CH04 데이터베이스 모델링
  • CH05 MySQL 유틸리티 사용법
  • CH06 SQL 기본
  • CH07 SQL 고급

PART03 MySQL 고급

  • CH08 테이블과 뷰
  • CH09 인덱스
  • CH10 스토어드 프로그램
  • CH11 전체 텍스트 검색과 파티션

 

ScoulaTodo_Pagination

 

페이지네이션 (Pagination)

 

페이지네이션의 정의

  • 여러 데이터 목록을 페이지 단위로 나누어 보여주는 기술.
  • 적용 대상: 목록 보기, 검색 결과 등.

페이지네이션 구현

  • limit 값: 한 페이지 당 표시할 데이터 건수.
  • offset 값: 현재 페이지를 기반으로 계산된 값.

예시

  • 한 페이지에 10개의 데이터를 표시하고 3번째 페이지를 보려면:
SELECT * FROM table_name LIMIT 10 OFFSET 20;
  • 여기서 OFFSET 20은 (현재 페이지 - 1) * limit 값으로 계산됨.

그리드 형태 페이지네이션

  • 카드 형태로 데이터를 보여주는 경우 (예: 유튜브)

 

추가자료: Context

 

Context의 개념

  • 객체의 생성과 배정을 중앙에서 관리하는 방법.
  • 문제점 해결: 의존 객체를 직접 생성하지 않고 Context를 통해 관리.
private Map<Class, Object> map;

 

이전 방식

  • 직접 객체 생성: UserDao dao = new UserDaoImpl();

변경된 방식

  • Context를 이용한 객체 생성: UserDao dao = Context.getBear(UserDao.class);
    • Context가 UserDao의 구현체를 관리하고 제공함.

Singleton 패턴 효과

  • Context를 통해 얻는 객체는 동일한 인스턴스.
  • 여러 번 호출해도 동일한 객체 반환.

 

금일 수업은 실습 위주로 개념 정리는 여기까지 하겠음.

 

실습: TodoApp

 

 

TodoDao.java

package org.scoula.todo.dao;

import org.scoula.todo.domain.Todo;

import java.util.ArrayList;
import java.util.List;

public class TodoDao {
    //private 생성자와 getInstance로 객체 리턴 => 싱글톤 패턴
    private static TodoDao instance = new TodoDao();
    public static TodoDao getInstance(){
        return instance;
    }
    private List<Todo> list;
    private TodoDao(){
        list = new ArrayList<>();// 임시 테스트 데이터 구성
        for(int i = 0; i < 10; i++){
            // 빌더 사용해서 열개의 객체 생성 후 리스트에 추가
            Todo todo = Todo.builder()
                    .title("Todo "+i)
                    .description("Description "+i)
                    .done(false)
                    .build();
            list.add(todo);
        }
    }

//    전체 할일 목록 가져오는 메소드 (Read)
    public List<Todo> getList(){
        return list;
    }

//    해당 아이디의 할일 가져오는 메소드 (Read)
    public Todo getTodo(int id){
        for(Todo todo: list){
//            리스트를 돌면서 받아온 id 값과 일치하는 todo 찾기
            if(todo.getId() == id){
                return todo;
            }
        }
        return null;
    }

    // 리스트에 새로운 todo 추가하는 메소드 (Create)
    public void add(Todo todo){
        list.add(todo);
    }


//    해당 todo를 새로운 값으로 변경해주는 메소드(Update)
    public void update(Todo todo){
        for(int i =0; i < list.size(); i++){
            if(todo.getId() == list.get(i).getId()){
//                리스트를 돌면서 id를 비교해서 해당 id의 todo를 새로운 todo로 변경
                list.set(i, todo);
            }
        }
    }

//     해당 아이디의 todo를 리스트에서 삭제해주는 메소드 (Delete)
    public void delete(int id){
        for(int i = 0; i < list.size(); i++){
//            리스트에서 해당 todo를 찾아서 삭제해준다
            if(list.get(i).getId() == id){
                list.remove(i);
                return;
            }
        }
    }
}