CoreData를 활용한 최근 본 책 기능 구현기

호씨·2024년 12월 31일
0

CoreData를 활용한 최근 본 책 기능 구현기

도서 검색 앱의 기능 개선 작업을 진행하였다. CoreData를 활용하여 최근 본 책 기능을 구현하고, 전반적인 코드 구조를 개선하였다.

기존 코드와의 주요 차이점

CoreData 모델 개선

// Before: RecentBook 엔티티에 기본 속성만 존재
- isbn (String)
- viewedAt (Date)

// After: 썸네일 이미지 URL 저장을 위한 속성 추가
- isbn (String)
- viewedAt (Date)
- thumbnail (String) // 추가된 속성

CoreDataManager 기능 개선

// Before: 최근 본 책의 기본 정보만 저장
func saveRecentBook(_ book: Book) {
    let recentBook = NSManagedObject(entity: entity, insertInto: context)
    recentBook.setValue(book.isbn, forKey: "isbn")
    recentBook.setValue(Date(), forKey: "viewedAt")
}

// After: 썸네일 URL도 함께 저장하여 이미지 표시 가능
func saveRecentBook(_ book: Book) {
    let recentBook = NSManagedObject(entity: entity, insertInto: context)
    recentBook.setValue(book.isbn, forKey: "isbn")
    recentBook.setValue(Date(), forKey: "viewedAt")
    recentBook.setValue(book.thumbnail, forKey: "thumbnail") // 썸네일 URL 저장
}

BookSearchViewModel 개선

// Before: 최근 본 책 관련 속성/메서드 부재
class BookSearchViewModel {
    private(set) var books: [Book] = []
}

// After: 최근 본 책 관련 기능 추가
class BookSearchViewModel {
    private(set) var books: [Book] = []
    private(set) var recentBooks: [Book] = [] // 최근 본 책 목록
    
    func loadRecentBooks() {
        recentBooks = CoreDataManager.shared.fetchRecentBooks()
        onBooksUpdated?()
    }
}

주요 개선사항 ✨

1. 데이터 영속성 강화

  • CoreData를 활용하여 앱 재시작 시에도 데이터 유지
  • 썸네일 URL 저장으로 이미지 표시 기능 구현

2. 사용자 경험 개선

  • 최근 본 책의 시각적 확인 기능
  • 최대 10개까지의 최근 본 책 자동 관리
  • 최신순 정렬 표시 구현

3. 코드 구조 개선

  • CoreDataManager의 책 관련 기능을 확장으로 분리
  • ViewModel의 최근 본 책 로직 캡슐화
  • UI 업데이트를 위한 바인딩 구조 개선

향후 개선 계획 🎯

1. 썸네일 이미지 캐싱 구현

  • 현재: URL에서 매번 이미지 다운로드
  • 개선: 이미지 캐싱을 통한 성능 최적화

2. 에러 처리 강화

  • CoreData 작업의 상세 에러 처리
  • 사용자 친화적인 에러 메시지 표시

3. 페이징 처리

  • 현재: 최근 10개 책만 표시
  • 개선: 더 많은 기록 보관 및 페이징 처리

4. UI/UX 개선

  • 빈 상태 처리 구현
  • 로딩 상태를 위한 스켈레톤 UI 추가
profile
이것저것 많이 해보고싶은 사람

0개의 댓글

관련 채용 정보