안녕하세요 이웃님들~ 개발하는 윤기사입니다! 요새 틈틈히 놀기도 하지만~ 주된 일상은 스위프트 공부입니다 ㅎㅎ
마치 제 삶의 일부가 된 것같은 스위프트! 더 친해지고 싶네요 ㅎㅎ
그래야 우리 이웃님들께 많은 것을 알려드릴 수 있으니~~ 제 마음 아시겠죠?

구조와 클래스에 이어서 이번 게시글에서는 클로저에 대해 알아볼 건데요!
준비 되셨나요~??

- Closure -
클로저는 어떤 상수나 변수의 참조를 캡쳐(capture)해 저장할 수 있습니다. Swift는 이 캡쳐와 관련한 모든 메모리를 알아서 처리합니다!
다시 말해서, 클로저는 특정 문맥의 상수나 변수의 값을 캡쳐할 수 있습니다. 원본 값이 사라져도 클로져의 바디 안에서 그 값을 활용할 수 있는 거죠!
클로저의 형태는 3가지로 나누어볼 수 있는데요!
- 전역 함수 (Global Function) : 이름이 있고 어떤 값도 캡쳐하지 않는 클로저
- 중첩 함수 (Nested Function) : 이름이 있고 관련한 함수로 부터 값을 캡쳐 할 수 있는 클로저
- 클로저 표현 : 경량화 된 문법으로 쓰여지고 관련된 문맥(context)으로부터 값을 캡쳐할 수 있는 이름이 없는 클로저
조금 더 나아가서, 클로저 표현은 최적화 되어서 간결하고 명확합니다.
- 문맥에서 타입(return type)의 추론
- 단일 표현 클로저에서의 암시적 반환
- 축약된 인자 이름
- 후위 클로저 문법
자, 이제 하나하나 설명을 드리겠습니다! 집중하세요!
sorted(by:)는 배열의 콘텐츠와 같은 타입을 갖고 두개의 인자를 갖는 클로저를 인자로 사용합니다.
names의 콘텐츠는 문자열 타입이므로 (String, String) -> Bool 의 타입의 클로저를 사용해야 합니다!
"랜덤배열" 클로저를 만들고 그것을 names.sorted(by: 랜덤배열)에 넣으면 원본 배열의 순서가 바뀐 배열을 얻을 수 있습니다.
[ 후위 클로저 문법 ]
👊 만약 함수의 마지막 인자로 클로저를 넣고 그 클로저가 길다면 후위 클로저를 사용할 수 있습니다.
마지막으로 클로저는 참조 타입입니다!!
함수나 클로저를 상수나 변수에 할당할 때 실제로는 상수와 변수에 해당 함수나 클로저의 참조(reference)가 할당 됩니다.
그래서 만약 한 클로저를 두 상수나 변수에 할당하면 그 두 상수나 변수는 같은 클로저를 참조하고 있습니다.
C나 C++에 익숙하신 분은 함수 포인터를 저장한다고 생각하시면 이해하기 쉬우실 것입니다!
이상 오늘 포스팅은 여기서 마치겠습니다!
요새 햇빛이 많이 뜨거워서 외출하실 때는 꼭! 선크림을 바르고 다니시길 바랍니다 이웃님들~
윤기사는 내일 더 알찬 내용을 가지고 돌아오겠습니다 ㅎㅎ
'Swift 기초 문법 👊' 카테고리의 다른 글
[Swift_문법] Inheritance(상속)에 대해 진심으로 알아보는 윤기사_9 (31) | 2022.06.02 |
---|---|
[Swift_문법] Methods에 대해 한번 알아보는 윤기사_8 (1) | 2022.05.31 |
[Swift_문법] Struct와 Class에 대해 오랜만에 알아보는 윤기사_6 (2) | 2022.05.27 |
[Swift_문법] Control Flow(제어 흐름)에 대해 깊게 알아보는 윤기사_5 (94) | 2022.05.25 |
[Swift_문법] enum에 대해 차근차근 알아보는 윤기사_4 (62) | 2022.05.24 |