본문 바로가기

iOS

[Swift] Closure

Closure

Closure는 간단하게 설명하자면 이름이 없는 함수라고 할 수 있다.

Closure는 First Class Type으로 변수에 할당할 수 있고, 인자로 받을 수 있고, 리턴할 수 있다.

 

Closure가 자주 쓰이는 2가지 경우
- Completion Block
   네트워크 통해서 데이터 받아올 때, 비동기 수행 시킬 때
- Higher Order Functions (input에 함수를 받을 수 있는 펑션)

   map, filter 같은 함수들의 input에 클로저를 넣어서 사용

 

 

Closure의 3가지 종류

- Global functions

- Nested functions

- Closure expressions

 

우리가 알아볼거는 Closure expressions다.

 

Closure의 기본 문법

 

기본 문법을 이용한 closure 사용 예시이다.

 

 

Closure는 아래 4가지 특성을 이용해 기본 문법보다 더욱 간편하게 사용할 수 있다.

1.  Inferring parameter and return value types from context

Context로부터 타입을 유추해서 타입을 생략하고 (a, b) 이렇게 사용할 수 있다.

 

2.  Implicit returns from single-expression closures

Single-Expression Closures에서는 반환 타입이 명확하기 때문에 return을 생략하여 사용할 수 있다.

 

3.  Shorthand argument names

Swift는 자동으로 inline closure 축약 인자 이름을 부여해서 $0,$1 이런 식으로 인자를 사용할 수 있다.

 

4.  Trailing closure syntax

함수의 마지막 인자로 closure가 들어갈 때 Trailing Closures 이용할 수 있다.

'( )' 밖에 쓸 수 있어서 파라미터가 많거나 코드가 길어질 때 사용하면 좋다.

 

 

Capturing Values

Closure는 자신의 원래 Scope이 아닌 주변 Context에 있는 상수와 변수의 값을 참조하고 수정할 수 있다.

위와 같이 원래 count 변수는 closure의 scope에 없지만 count를 capturing 해서 incrememter()를 통해 count를 1 증가시킬 수 있다.