Swift에서 completion은 주로 비동기 작업을 처리할 때 사용되는 클로저를 의미합니다. 비동기 작업이 완료된 후 특정 작업을 수행하기 위해 호출되는 코드를 포함하는 매개변수입니다.
Completion의 목적
Completion은 작업이 완료된 시점에 결과를 처리하거나 후속 작업을 실행하도록 설계되었습니다. 예를 들어, 네트워크 요청, 파일 읽기/쓰기, 애니메이션 완료 등 시간이 걸리는 작업에서 사용됩니다.
사용 방식
Completion은 함수의 매개변수로 전달되는 클로저 형태입니다. 작업이 끝난 뒤 호출하여 결과를 반환하거나, 작업 완료 후 추가 동작을 실행합니다.
예시 코드
기본적인 Completion 사용 예시
func fetchData(completion: @escaping (String) -> Void) {
DispatchQueue.global().async {
// 데이터 처리 (예: 네트워크 요청)
let data = "Fetched Data"
DispatchQueue.main.async {
completion(data) // 작업 완료 후 클로저 호출
}
}
}
// 함수 호출
fetchData { result in
print("Result: \(result)") // "Result: Fetched Data" 출력
}
Optional Completion 사용 예시
Completion을 선택적으로 사용할 수도 있습니다.
func performTask(completion: ((Bool) -> Void)?) {
let success = true
// 작업 완료 후 호출 (completion이 nil이 아니면 실행)
completion?(success)
}
// 호출 시 completion 전달
performTask { isSuccess in
if isSuccess {
print("Task completed successfully!")
}
}
@escaping 키워드
• @escaping 키워드는 클로저가 함수의 실행이 끝난 뒤에도 사용될 수 있음을 명시합니다. 예를 들어, 비동기 작업에서 completion은 함수가 리턴된 뒤 호출되므로 @escaping이 필요합니다.
• @escaping이 없는 경우: 클로저가 함수 내부에서만 사용되며 함수가 반환되기 전에 호출됩니다.
Completion의 활용
• 네트워크 요청: 서버로부터 데이터를 가져온 후 UI를 업데이트.
• 애니메이션: 애니메이션 완료 후 다른 동작 실행.
• 데이터 처리: 비동기 작업이 끝난 뒤 결과를 전달.
Completion의 장점
• 작업이 끝난 뒤 명확하게 후속 작업을 수행할 수 있습니다.
• 코드가 더 모듈화되고 유지 관리가 쉬워집니다.
• 비동기 작업의 흐름을 관리하기 용이합니다.
Completion을 사용하면 코드의 비동기 특성을 효율적으로 처리할 수 있습니다. 이는 Swift에서 비동기 프로그래밍의 중요한 기법 중 하나입니다.
'App Development > Swift' 카테고리의 다른 글
Swift에서 동기와 비동기의 차이 (0) | 2024.11.30 |
---|---|
Swift의 매개변수(parameter) 정리하기 (0) | 2024.11.30 |
Swift의 Closure 란? (0) | 2024.11.25 |
Swift의 ARC (Automatic Reference Counting) (0) | 2024.11.24 |
Swift에서의 Class (0) | 2024.11.24 |