본문 바로가기
Swift 기초 문법 👊

[Swift_문법] Closure에 대해 진지하게 알아보는 윤기사_7

by 개발하는윤기사 2022. 5. 30.
728x90
반응형

안녕하세요 이웃님들~ 개발하는 윤기사입니다! 요새 틈틈히 놀기도 하지만~ 주된 일상은 스위프트 공부입니다 ㅎㅎ

 

마치 제 삶의 일부가 된 것같은 스위프트! 더 친해지고 싶네요 ㅎㅎ

 

그래야 우리 이웃님들께 많은 것을 알려드릴 수 있으니~~ 제 마음 아시겠죠?

 

 

구조와 클래스에 이어서 이번 게시글에서는 클로저에 대해 알아볼 건데요! 

 

준비 되셨나요~??

- Closure -

 

 

클로저는 어떤 상수나 변수의 참조를 캡쳐(capture)해 저장할 수 있습니다. Swift는 이 캡쳐와 관련한 모든 메모리를 알아서 처리합니다!

 

다시 말해서, 클로저는 특정 문맥의 상수나 변수의 값을 캡쳐할 수 있습니다. 원본 값이 사라져도 클로져의 바디 안에서 그 값을 활용할 수 있는 거죠!

 

클로저의 형태는 3가지로 나누어볼 수 있는데요! 

 

  • 전역 함수 (Global Function) : 이름이 있고 어떤 값도 캡쳐하지 않는 클로저
  • 중첩 함수 (Nested Function) : 이름이 있고 관련한 함수로 부터 값을 캡쳐 할 수 있는 클로저
  • 클로저 표현 : 경량화 된 문법으로 쓰여지고 관련된 문맥(context)으로부터 값을 캡쳐할 수 있는 이름이 없는 클로저

 

조금 더 나아가서, 클로저 표현은 최적화 되어서 간결하고 명확합니다.

 

  • 문맥에서 타입(return type)의 추론
  • 단일 표현 클로저에서의 암시적 반환
  • 축약된 인자 이름
  • 후위 클로저 문법
 

 

 

 자, 이제 하나하나 설명을 드리겠습니다! 집중하세요!

 

sorted(by:)를 이용해 순서가 바뀐 배열을 만들었다!

 

sorted(by:)는 배열의 콘텐츠와 같은 타입을 갖고 두개의 인자를 갖는 클로저를 인자로 사용합니다.

names의 콘텐츠는 문자열 타입이므로 (String, String) -> Bool 의 타입의 클로저를 사용해야 합니다!

"랜덤배열" 클로저를 만들고 그것을 names.sorted(by: 랜덤배열)에 넣으면 원본 배열의 순서가 바뀐 배열을 얻을 수 있습니다.

 

클로저 표현 문법의 기본 형태!

 

 

위에 만든 sorted(by:)의 다른 예시다!

 

위 예시에서 더 간단하게 할 수 있다.

 
위에 in return은 문맥에서 타입 추론 방법이구, 아래 return을 생략한 것은 클로저에서의 암시적 반환입니다!
 
축약된 연자 이름은 var 랜덤이름3= names.sorted(by: { $0 > $1 } ) 으로 하면 됩니다.
 
 

[ 후위 클로저 문법 ]

 

후위 클로저 예시!

 

👊 만약 함수의 마지막 인자로 클로저를 넣고 그 클로저가 길다면 후위 클로저를 사용할 수 있습니다.

 

마지막으로 클로저는 참조 타입입니다!!

함수나 클로저를 상수나 변수에 할당할 때 실제로는 상수와 변수에 해당 함수나 클로저의 참조(reference)가 할당 됩니다.

그래서 만약 한 클로저를 두 상수나 변수에 할당하면 그 두 상수나 변수는 같은 클로저를 참조하고 있습니다.

C나 C++에 익숙하신 분은 함수 포인터를 저장한다고 생각하시면 이해하기 쉬우실 것입니다!

 

이상 오늘 포스팅은 여기서 마치겠습니다!

 

요새 햇빛이 많이 뜨거워서 외출하실 때는 꼭! 선크림을 바르고 다니시길 바랍니다 이웃님들~

 

윤기사는 내일 더 알찬 내용을 가지고 돌아오겠습니다 ㅎㅎ

 

728x90
반응형