Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- segue
- 글또
- Switch
- NotificationCenter
- Refresh
- self
- calendar
- http
- SWIFT
- uikit
- 회고
- struct
- PushNotification
- 화면전환
- viewlifecycle
- SWIFTUI
- class
- singleton
- apns
- ScrollView
- mvvm
- list
- IOS
- Observer
- escaping
- 고차함수
- error
- protocol
- Git
- array
Archives
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - @escaping 본문
📘 Swift 문법 정리: @escaping
클로저를 사용할 때 사용하게 되는 @escaping에 대해 자세히 알아보자
🔹 문법 설명
@escaping은 클로저가 함수의 실행이 끝난 후에도 실행될 수 있음을 나타내는 키워드
즉, 클로저가 함수 외부에서 나중에 호출될 가능성이 있다면 Swift는 명시적으로 @escaping 키워드를 요구함
비동기 처리, API 응답, 딜레이 작업 등에서 주로 사용되며
잘못 사용하면 메모리 누수나 컴파일 에러로 이어질 수 있다.
🔹 예제 1 : 비동기 작업
func fetchData(completion: @escaping (String) -> Void) {
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
completion("데이터 수신 완료")
}
}
📌 completion 클로저는 함수 fetchData가 끝난 후에도 비동기적으로 실행되기에 @escaping이 필요함
🔹 예제 2: 클로저를 외부 변수에 저장
var storedClosure: (() -> Void)?
func saveTask(task: @escaping () -> Void) {
storedClosure = task
}
📌 클로저를 함수 외부 변수에 저장 -> 함수 종료 이후에도 실행될 수 있으므로 @escaping이 필요함
🔹 메모리 누수 주의: @escaping + self
클로저가 self를 캡처하면 강한 참조 순환 위험이 있다.
func doSomething() {
fetchData { [weak self] result in
self?.handle(result)
}
}
➡️ @escaping 클로저에서는 항상 [weak self] 또는 [unowned self]를 고려해야 함
🔹 자주 사용되는 곳
- 네트워크 요청 (URLSession)
- 애니메이션 완료 처리
- 딜레이 처리 (GCD)
- Notification, delegate에서 클로저 방식으로 처리할 때
'IOS' 카테고리의 다른 글
Swift) 문법 정리 - 싱글톤(Singleton) 패턴 (0) | 2022.07.26 |
---|---|
Swift) 문법 정리 - self vs Self (0) | 2022.07.19 |
Swift) Alert vs Action Sheet (0) | 2022.07.19 |
Swift) AutoLayout vs Frame (0) | 2022.07.19 |
Swift) 문법 정리 - guard문 (0) | 2022.07.19 |
Comments