[swift] 데이터를 파일에 저장하고 불러오는 방법 비교

Swift 앱을 개발하다 보면 데이터를 파일에 저장하고 나중에 불러와야 하는 경우가 많이 있습니다. 이를 위해 iOS 및 macOS 앱 개발에서는 여러가지 방법을 사용할 수 있습니다. 여기에서는 UserDefaults, FilemanagerCodable 프로토콜을 사용하여 데이터를 파일에 저장하고 불러오는 방법을 비교하겠습니다.

1. UserDefaults

UserDefaults는 간단한 데이터를 파일에 저장하고 불러오는 가장 간단한 방법 중 하나입니다. 이 방법은 소량의 데이터에 적합하며 주로 설정 값이나 사용자 기본 설정과 같은 데이터를 저장하는 데 사용됩니다.

// 데이터 저장
let defaults = UserDefaults.standard
defaults.set("Value", forKey: "Key")

// 데이터 불러오기
if let value = defaults.string(forKey: "Key") {
    print(value)
}

2. Filemanager

Filemanager를 사용하여 원하는 형태의 데이터를 파일에 저장하고 불러올 수 있습니다. 이 방법은 파일 또는 디렉토리를 생성하고 읽기/쓰기 권한을 관리하는 데 사용됩니다.

// 데이터 저장
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.txt")
try? "Hello, World".write(to: fileURL, atomically: true, encoding: .utf8)

// 데이터 불러오기
if let content = try? String(contentsOf: fileURL) {
    print(content)
}

3. Codable 프로토콜

Codable 프로토콜을 사용하여 사용자 지정 데이터 모델을 파일에 저장하고 불러올 수 있습니다. 이 방법은 구조화된 복잡한 데이터를 저장하는 데 유용합니다.

struct Person: Codable {
    var name: String
    var age: Int
}

// 데이터 저장
let person = Person(name: "John", age: 30)
let encoder = JSONEncoder()
if let data = try? encoder.encode(person) {
    let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("person.json")
    try? data.write(to: fileURL)
}

// 데이터 불러오기
let decoder = JSONDecoder()
if let data = try? Data(contentsOf: fileURL),
    let loadedPerson = try? decoder.decode(Person.self, from: data) {
    print(loadedPerson)
}

결론

데이터를 파일에 저장하고 불러오는 방법은 앱의 요구 사항과 데이터의 형태에 따라 다릅니다. 간단한 설정 값이나 사용자 기본 설정과 같은 소량의 데이터는 UserDefaults를 사용하여 저장할 수 있고, 복잡한 구조화된 데이터는 Codable을 사용하여 저장할 수 있습니다. 또한 특정한 파일 또는 디렉토리를 관리해야 하는 경우에는 Filemanager를 사용하여 데이터를 저장하고 불러올 수 있습니다.

따라서 앱의 요구에 따라 적절한 방법을 선택하여 데이터를 파일에 저장하고 불러오는 것이 중요합니다.