# iOS 도서 검색 앱 기능 추가 및 개선

호씨·2024년 12월 30일
0

iOS 도서 검색 앱 기능 추가 및 개선 🔄

도서 검색 앱의 기능 추가와 개선 작업을 진행하였다. CoreData를 도입하여 데이터 영구 저장소를 구현하고, UI/UX를 전반적으로 수정했다.

CoreData 기능 구현 💾

CoreData 관리자 클래스 구현

class CoreDataManager {
    static let shared = CoreDataManager()
    private init() {}
    
    lazy var persistentContainer: NSPersistentContainer = {
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            fatalError("AppDelegate not found")
        }
        return appDelegate.persistentContainer
    }()
    
    // CoreData 저장, 삭제, 조회 기능 구현
    func saveBook(_ book: Book) {
        // 저장 로직
    }
    
    func fetchBooks() -> [Book] {
        // 조회 로직
        return []
    }
    
    func deleteBook(with isbn: String) {
        // 삭제 로직
    }
}
  • 싱글톤 패턴으로 CoreData 관리 구현
  • 책 정보의 저장, 조회, 삭제 기능 구현
  • AppDelegate와 연동하여 CoreData 컨텍스트 관리

BookmarkViewModel 개선

class BookmarkViewModel {
    private let coreDataManager = CoreDataManager.shared
    
    func addBookmark(_ book: Book) {
        coreDataManager.saveBook(book)
        onBookmarksUpdated?()
    }
    
    func deleteAllBookmarks() {
        let bookmarks = getBookmarks()
        bookmarks.forEach { book in 
            removeBookmark(isbn: book.isbn)
        }
        onBookmarksUpdated?()
    }
}
  • 메모리 기반 저장소에서 CoreData 기반 영구 저장소로 전환
  • 전체 삭제 기능 추가

UI/UX 개선 🎨

BookDetailViewController 개선

class BookDetailViewController {
    var isBookmarked: Bool = false
    
    private func setupActionButton() {
        if !isBookmarked {
            actionButton.setTitle("담기", for: .normal)
            actionButton.backgroundColor = .systemGreen
        }
    }
}
  • 검색 탭과 저장된 책 탭에서 다른 UI 표시 구현
  • 검색 탭에서는 초록색 '담기' 버튼 표시
  • 저장된 책 탭에서는 버튼 미표시 처리

BookmarkViewController 개선

class BookmarkViewController {
    private let deleteAllButton: UIButton = {
        let button = UIButton()
        button.setTitle("전체삭제", for: .normal)
        button.setTitleColor(.systemRed, for: .normal)
        return button
    }()
    
    @objc private func deleteAllButtonTapped() {
        guard viewModel.bookmarkCount > 0 else {
            // 경고 얼럿 표시
            return
        }
        // 삭제 확인 얼럿
        let alert = UIAlertController(...)
    }
}
  • 우상단에 '전체삭제' 버튼 추가
  • 스와이프로 개별 삭제 기능 구현
  • 삭제 작업 시 확인 얼럿 표시
  • 저장된 책이 없을 경우 경고 얼럿 표시
profile
이것저것 많이 해보고싶은 사람

0개의 댓글

관련 채용 정보