클로저를 함수로 전달
클로저는 String
과 Int
처럼 사용할 수 있으므로 이것을 함수에 전달할 수 있습니다. 이건 처음배우는 분들에겐 정말 복잡하고 어렵기 때문에 단계별로 진행하도록 하겠습니다.
먼저 기본 diriving()
클로저를 만들겠습니다.
let driving = {
print("나는 지금 차를 타고 이동중이다.")
}
위 클로저를 함수에 전달하여 함수 내에서 실행 할 수 있도록 하려면 매개변수 유형을 () -> void
즉, 매개변수를 작성하지 않고 아무것도 반환하지 않아야 합니다. 따라서 아래와 같이 작성할 수 있습니다. 함수에 반환하는 곳을 잘 확인해주세요.
func travel(action: () -> Void) {
print("나는 나갈 준비를 하고있다.")
action()
print("나는 도착했다!")
}
이제 함수에 클로저를 넣어 출력해보도록 할께요.
travel(action: driving)
자 이렇게 출력해보면 함수에 있는 코드 순서대로 나오겠죠?
// 나는 나갈 준비를 하고있다.
// 나는 지금 차를 타고 이동중이다.
// 나는 도착했다!
클로저를 매개변수로 사용하는 이유?
Swift의 클로저는 다른 유형의 데이터처럼 사용할 수 있습니다. 즉, 클로저를 함수로 전달하고 사본을 가져오는 등의 작업을 할 수 있습니다. 그러나 처음 이것에 대해 배우는 분들에게는 장점을 찾기가 어렵습니다.
예시 1 - 좋은 예시 중 하나는 Siri가 앱과 통합되는 방식입니다. Siri는 iOS 기기의 어느 곳에서나 실행되는 시스템 서비스이면서 앱과 통신할 수 있습니다.
우리는 특정한 앱으로 차량을 예약할 수 있고 , 날씨를 확인할 수 있습니다. 이렇게 Siri는 백그라운드에서 앱의 작은 부분을 시작하여 음성 요청을 전달한 다음 Siri 사용자 인터페이스의 일부로 앱의 응답을 표시합니다.
그런데 만약, 나의 앱이 제대로 작동하지 않고 Siri에 응답하는 데 10초
가 걸리면 어떨까요?
사용자는 실제로 내 앱을 보지 않고 Siri 만 볼 수 있으므로 Siri가 멈춘 것처럼 보이겠죠? 이것은 안 좋은 사용자 경험이므로 Apple은 대신 클로저를 사용합니다.
첫 번째, 앱을 백그라운드에서 실행하고 완료되면 호출할 수 있는 클로저를 전달합니다.
두 번째, 다음 앱이 수행해야 할 작업을 파악하는 데 오래 걸릴 수 있기 때문에, 완료가 되면 클로저를 호출하여 데이터를 Siri로 다시 보냅니다.
함수에서 값을 반환하는 대신 클로저를 사용하여 데이터를 다시 보내면 Siri가 함수가 완료될 때까지 기다릴 필요가 없으므로 사용자 인터페이스를 대화형으로 유지할 수 있습니다.
예시 - 또 다른 일반적인 예시는 네트워크 요청을 만드는 것입니다.
평균적으로 iPhone은 초당 수십 억 개의 작업을 수행할 수 있지만, 해외에 있는 서버에 연결하는 데는 0.5초
이상이 걸립니다. 장치에서 발생하는 속도에 비하면 거의 거북이 수준이죠. 따라서 인터넷에서 데이터를 요청할 때 클로저를 수행합니다.
"데이터를 가져오십시오. 이 데이터를 가져오면 이 클로저를 실행하십시오."
다시 말해, 느린 작업이 발생하는 동안 사용자의 인터페이스를 강제로 중지시키지 않습니다.
클로저를 함 수로 전달 Test : 문제를 풀려면 이곳을 클릭해주세요
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [#4 후행 클로저에 매개변수 사용 ] (0) | 2021.02.25 |
---|---|
Swift : 기초문법 [#3 후행 클로저 - Closure syntax] (0) | 2021.02.24 |
Swift : 기초문법 [#1 클로저 기본 - Closure] (1) | 2021.02.24 |
Swift : 기초문법 [매개변수 레이블 - Parameter Label] (0) | 2021.02.23 |
Swift : 기초문법 [중첩된 루프에서 Break] (0) | 2021.02.21 |