[swift] Swift에서 파일을 이진 형식으로 저장하는 방법

Swift는 강력하고 간편한 프로그래밍 언어로, 파일을 이진 형식으로 저장하는 것도 쉽게 할 수 있습니다. 이진 형식으로 데이터를 저장하면 보안성과 처리 속도를 향상시킬 수 있습니다.

1. 데이터를 이진 형식으로 변환하기

먼저, 저장하려는 데이터를 이진 형식으로 변환해야 합니다. 이진 형식으로 변환하는 가장 일반적인 방법은 Data 타입을 사용하는 것입니다.

import Foundation

// 저장할 데이터 생성
let name = "John"
let age = 30

// 데이터를 바이트 배열로 변환
var data = Data()

// 문자열을 UTF-8로 인코딩하여 데이터에 추가
if let nameData = name.data(using: .utf8) {
    data.append(nameData)
}

// 정수를 4바이트로 변환하여 데이터에 추가
var ageValue = age
let ageData = Data(bytes: &ageValue, count: MemoryLayout.size(ofValue: ageValue))
data.append(ageData)

위의 코드에서 nameage는 저장할 데이터입니다. Data 타입의 인스턴스인 data를 생성한 후, name을 UTF-8로 인코딩하여 바이트 배열로 변환하여 데이터에 추가합니다. 그리고 age는 정수이므로, 바이트 배열로 변환하여 데이터에 추가합니다.

2. 데이터를 파일에 저장하기

이제 Data 타입으로 변환한 데이터를 파일에 저장해보겠습니다. 파일을 저장하기 위해서는 파일 경로를 지정하고 write(to:) 메서드를 호출하여 데이터를 파일에 씁니다.

import Foundation

// 파일 경로 지정
let filePath = "path/to/file.bin"

// 데이터를 파일에 저장
do {
    try data.write(to: URL(fileURLWithPath: filePath))
    print("Data saved to \(filePath)")
} catch {
    print("Failed to save data: \(error.localizedDescription)")
}

위의 코드에서 filePath는 저장할 파일의 경로입니다. write(to:) 메서드를 호출하여 데이터를 파일에 쓰기 시도합니다. 쓰기가 성공하면 파일 경로가 출력되고, 실패하면 에러 메시지가 출력됩니다.

3. 파일로부터 데이터를 읽어오기

위에서 저장한 이진 형식의 파일을 읽어와서 데이터를 다시 사용하는 방법도 알아보겠습니다. 파일에서 데이터를 읽어오기 위해서는 파일의 경로를 지정하고 Data(contentsOf:) 메서드를 호출하여 데이터를 가져옵니다.

import Foundation

// 파일 경로 지정
let filePath = "path/to/file.bin"

// 파일에서 데이터 읽어오기
if let loadedData = try? Data(contentsOf: URL(fileURLWithPath: filePath)) {
    // 데이터를 이용하여 작업 수행
    if let loadedName = String(data: loadedData, encoding: .utf8) {
        print("Loaded name: \(loadedName)")
    }
    
    let loadedAgeData = loadedData.subdata(in: loadedData.count-4..<loadedData.count)
    let loadedAgeValue = loadedAgeData.withUnsafeBytes {
        $0.load(as: Int.self)
    }
    print("Loaded age: \(loadedAgeValue)")
} else {
    print("Failed to load data from \(filePath)")
}

위의 코드에서 filePath는 읽어올 파일의 경로입니다. Data(contentsOf:) 메서드를 사용하여 파일에서 데이터를 가져옵니다. 데이터를 다시 사용하기 위해, 가져온 데이터를 이용하여 원하는 작업을 수행할 수 있습니다. 위의 예시에서는 문자열로 변환하여 이름을 출력하고, subdata(in:) 메서드를 사용하여 마지막 4바이트의 데이터를 추출하여 정수로 변환하여 나이를 출력합니다.


Swift에서 파일을 이진 형식으로 저장하는 방법을 알아보았습니다. 이진 형식은 데이터를 효율적으로 저장하고 처리할 수 있는 강력한 도구입니다. 이를 통해 데이터의 보안성과 처리 속도를 향상시킬 수 있습니다.