[swift] NSFetchRequest 배치 처리

Swift에서 CoreData를 사용하면 대량의 데이터를 쿼리해야 할 때 성능 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 NSFetchRequest 배치 처리를 사용할 수 있습니다.

NSFetchRequest 배치 처리는 데이터를 작은 그룹으로 나누어 처리하여 메모리 사용량을 줄이고 속도를 향상시킵니다. 이를 사용하면 대량의 데이터를 처리할 때 앱의 성능이 향상될 수 있습니다.

아래는 NSFetchRequest 배치 처리를 사용하는 방법의 예입니다.

배치 처리 옵션 설정하기

NSFetchRequest 객체를 만들고 배치 처리 옵션을 설정해야 합니다. 배치 처리 옵션은 다음과 같습니다.

  1. fetchBatchSize: 한 번에 가져올 객체의 개수를 설정합니다. 이 값을 크게 설정하면 메모리 사용량은 감소하지만 가져오는 시간은 증가합니다. 기본값은 0으로, 한 번에 모든 데이터를 가져옵니다.
  2. fetchLimit: 가져올 최대 객체 수를 설정합니다. 이 값을 설정하면 지정한 개수만큼의 객체만 가져옵니다. 기본값은 0으로, 제한이 없습니다.
  3. fetchOffset: 결과에서 건너뛸 처음 N개의 객체 수를 설정합니다. 이 값을 설정하면 지정한 개수만큼의 객체를 건너뛰고 결과를 반환합니다. 기본값은 0으로, 건너뛸 객체가 없습니다.

아래는 배치 처리 옵션을 설정하는 예입니다.

let fetchRequest: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
fetchRequest.fetchBatchSize = 1000
fetchRequest.fetchLimit = 5000
fetchRequest.fetchOffset = 5000

데이터 일괄 처리하기

NSFetchRequest 배치 처리를 사용하여 데이터를 일괄적으로 처리할 수 있습니다. 아래는 NSFetchRequest 배치 처리를 사용하여 데이터를 일괄적으로 로드하는 예입니다.

let fetchRequest: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
fetchRequest.fetchBatchSize = 100
fetchRequest.fetchLimit = 1000

do {
    let results = try managedObjectContext.fetch(fetchRequest)

    for result in results {
        // 데이터 처리 로직
    }
} catch {
    // 오류 처리
}

위의 예에서는 한 번에 100개의 객체를 가져오고, 최대 1000개의 객체를 가져옵니다. 가져온 결과를 for 루프를 이용하여 로직을 처리할 수 있습니다.

참고 자료