[swift] 코어 데이터와 JSON 데이터 변환

코어 데이터(Core Data)는 iOS 앱에서 데이터를 관리하고 저장하는 데 사용되는 프레임워크입니다. JSON(JavaScript Object Notation)은 데이터를 표현하기 위한 경량 데이터 형식으로, 웹 서비스와의 데이터 교환에 많이 사용됩니다. 이번 포스트에서는 코어 데이터와 JSON 데이터 간의 변환에 대해 알아보겠습니다.

JSON 데이터를 코어 데이터로 변환하기

JSON 데이터를 코어 데이터로 변환하는 과정은 다음과 같습니다:

  1. JSON 데이터를 파싱하여 NSDictionary 또는 NSArray와 같은 형태로 메모리에 로드합니다.
  2. 코어 데이터 모델에 해당하는 엔티티 클래스를 생성합니다.
  3. 로드한 JSON 데이터에서 필요한 정보를 추출하여, 생성한 엔티티 클래스의 인스턴스에 할당합니다.
  4. 변경 사항을 코어 데이터 컨텍스트에 저장합니다.

예를 들어, 다음은 JSON 데이터를 코어 데이터로 변환하는 Swift 코드의 일부입니다:

import CoreData

func convertJSONToCoreData(jsonData: Data) {
    do {
        // JSON 데이터 파싱
        let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
        
        // 코어 데이터 모델에 해당하는 엔티티 클래스 생성
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
        let context = appDelegate.persistentContainer.viewContext
        let entityDescription = NSEntityDescription.entity(forEntityName: "Person", in: context)!
        
        if let jsonArray = jsonObject as? [[String: Any]] {
            for json in jsonArray {
                // 필요한 정보 추출 및 코어 데이터에 할당
                let person = Person(entity: entityDescription, insertInto: context)
                person.name = json["name"] as? String
                person.age = json["age"] as? Int16
                
                // 변경 사항 저장
                try context.save()
            }
        }
    } catch {
        print("Error parsing JSON: \(error)")
    }
}

이 코드에서는 JSON 데이터를 파싱한 후, “Person” 엔티티에 해당하는 Person 클래스의 인스턴스를 생성하고 필요한 정보를 할당한 후, 코어 데이터 컨텍스트에 저장하는 과정을 수행합니다.

코어 데이터를 JSON 데이터로 변환하기

코어 데이터를 JSON 데이터로 변환하는 과정은 다음과 같습니다:

  1. 코어 데이터 컨텍스트에서 필요한 데이터를 가져옵니다.
  2. 가져온 데이터를 JSON 형식으로 변환합니다.
  3. JSON 데이터를 파일 또는 웹 서비스에 전송합니다.

다음은 코어 데이터를 JSON 데이터로 변환하는 Swift 코드의 예시입니다:

func convertCoreDataToJSON() -> Data? {
    var jsonData: Data? = nil
    
    do {
        // 코어 데이터 컨텍스트에서 데이터 가져오기
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return nil }
        let context = appDelegate.persistentContainer.viewContext
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
        let people = try context.fetch(fetchRequest) as? [Person]
        
        // JSON 형식으로 변환
        let jsonObjects = people?.map { person -> [String: Any] in
            return [
                "name": person.name ?? "",
                "age": person.age
            ]
        }
        
        jsonData = try JSONSerialization.data(withJSONObject: jsonObjects ?? [])
    } catch {
        print("Error converting Core Data to JSON: \(error)")
    }
    
    return jsonData
}

위 코드에서는 코어 데이터 컨텍스트에서 “Person” 엔티티에 해당하는 데이터를 가져온 후, 필요한 정보를 추출하여 JSON 형식으로 변환합니다. 최종적으로, 변환된 JSON 데이터를 반환합니다.

결론

코어 데이터와 JSON 데이터 간의 변환은 iOS 앱에서 데이터의 효율적인 관리와 웹 서비스와의 데이터 교환에 중요한 역할을 합니다. 이를 통해 앱의 성능을 향상시키고 데이터의 일관성을 유지할 수 있습니다. 코어 데이터에서 JSON 데이터로 변환하거나, 그 반대로 JSON 데이터를 코어 데이터로 변환하는 방법을 익혀서 앱 개발에 활용해보세요.

참고 자료