궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 기초문법 [#2 클로저를 함수로 전달]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

클로저를 함수로 전달 

클로저는 StringInt 처럼 사용할 수 있으므로 이것을 함수에 전달할 수 있습니다. 이건 처음배우는 분들에겐 정말 복잡하고 어렵기 때문에 단계별로 진행하도록 하겠습니다.

 

먼저 기본 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 : 문제를 풀려면 이곳을 클릭해주세요

 

 

읽어주셔서 감사합니다🤟


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.