Search

Swift에서 Async/Await 기능이 도입되기 전에, 비동기(Asynchronous) 작업을 처리하는 방법에는 어떤 것들이 있나요?

권운기
권지원
Completion Handlers와 Deligate가 있다.
김현진
양주원
정은수

1. Completion Handlers

var comletionHandler: (() -> Void)? { get set }
비동기 작업이 완료되는 호출되는 completion Handler을 사용한다.
작업이 완료 되면 해당 클로저가 호출된다.
func fetchData(completion: @escaping (Data?, Error?) -> Void) { // 비동기 작업 수행 // 작업 완료 후 completion 핸들러 호출 // 예: 네트워크 요청, 파일 로드 등 } fetchData { data, error in if let data = data { //데이터 사용 } else if let error = error { //에러 처리 } }
Swift
복사

2. Delegation

프로토콜과 델리게이트를 사용하여 비동기 작업의 결과를 다른 객체로 전달하는 방법
작업이 완료되면 델리게이트 메서드가 호출된다.
protocol DataFetcherDelegate: AnyObject { func didFetchData(data: Data) func didFailWithError(error: Error) } class DataFetcher { //DataFetcher 클래스는 일을 위임할 delegate변수와 fetchData함수를 만든다. weak var delegate: DataFetcherDelegate? func fetchData() { // 비동기 작업 수행 // 작업 완료 후 델리게이트 메서드 호출 } } // 사용 예시 let dataFetcher = DataFetcher() dataFetcher.delegate = self dataFetcher.fetchData() extension YourClass: DataFetcherDelegate { func didFetchData(data: Data) { // 데이터 사용 } func didFailWithError(error: Error) { // 에러 처리 } }
Swift
복사