[swift] Swift GCD에서의 작업 간의 데이터 저장 방법

Swift Grand Central Dispatch(GCD)를 사용하면 백그라운드에서 작업을 수행하고, 메인 스레드에서 작업을 업데이트하는 등 다양한 작업을 처리할 수 있습니다. 이때 각각의 작업이나 스레드 간에 데이터를 공유하거나 전달해야 할 때, 데이터를 효과적으로 저장하고 전달하는 방법을 알 필요가 있습니다.

작업 간의 데이터 저장 방법

GCD에서 작업 간에 데이터를 저장하고 전달하는 방법은 크게 두 가지로 나뉩니다.

1. Closure Capture

클로저 캡처를 사용하여 데이터를 저장하고 전달할 수 있습니다. 클로저 내부에서 외부 변수를 캡처하여 사용할 수 있기 때문에, 작업의 결과나 중간 값을 클로저 내부에서 저장하고 다른 작업으로 전달할 수 있습니다.

예시:

var result: Int = 0

DispatchQueue.global().async {
    result = performCalculations()
    
    DispatchQueue.main.async {
        updateUI(with: result)
    }
}

2. DispatchQueue Specific (Dispatch Specific)

DispatchQueueSpecific을 사용하여 작업 간에 데이터를 저장하고 전달할 수 있습니다. 이 방법은 작업을 수행하는 스레드마다 특정 데이터를 저장하고, 이 데이터를 사용하여 작업을 수행하거나 전달할 수 있습니다.

예시:

let key = DispatchSpecificKey<Int>()
let queue = DispatchQueue(label: "com.example.queue", qos: .userInitiated, attributes: .concurrent, autoreleaseFrequency: .workItem, target: nil)

queue.setSpecific(key: key, value: 42)

queue.async {
    if let value = DispatchQueue.getSpecific(key: key) {
        print("Value from specific: \(value)")
    }
}

결론

GCD에서의 작업 간 데이터 저장은 클로저 캡처와 DispatchQueueSpecific을 이용하여 처리할 수 있습니다. 적절한 방식을 선택하여 데이터를 효율적으로 관리하고, 작업 간에 안전하게 전달할 수 있습니다.

더 자세한 내용은 Apple Developer Documentation를 참고하세요.