seong_hye, the developer

Swift) 문법 정리 - @escaping 본문

IOS

Swift) 문법 정리 - @escaping

seong_hye 2022. 7. 19.

📘 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