적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/Swift

[Swift 용어] Closures 클로저란?

hongssup_ 2020. 12. 20. 18:48
반응형

Closures 클로저란?

간단하게 말하자면, 특정 함수가 반환되어 사라져도 그 속의 instance들은 소멸되지 않도록 보존해주는 캡쳐본(복사본)이라고 할 수 있다.

 

1) 클로저는 특정 context에서 모든 상수 및 변수에 대한 참조를 캡쳐하고 저장할 수 있다.

 * Capturing Values 값 캡쳐 : 클로저는 특정 context의 상수(constants)나 변수(variables)의 값을 캡쳐하여, 원본 값이 사라지더라도 클로저의 body 안에서 그 값을 활용할 수 있도록 해준다. 

(Swift에서 값을 캡처 할 수 있는 가장 간단한 형태의 클로저는 다른 함수의 본문 내에 작성된 중첩 함수(Nested functions)로, 중첩함수는 외부 함수의 인수 및 외부 함수 내에 정의된 모든 상수나 변수를 캡쳐할 수 있다.)

 

2) 클로저는 참조타입(reference type)이다.

 

3) 클로저의 세가지 형태 Three forms of closures    (함수는 클로저의 한 형태로, 이름이 있는 클로저를 말한다.)

- 전역 함수 Global Functions : 이름이 있고 값을 캡쳐하지 않는 클로저

- 중첩 함수 *Nested Functions : 이름이 있고 (자신을 둘러싼) 외부 함수에서 값을 캡쳐할 수 있는 클로저

- 클로저 표현식 Closure Expressions : 주변 context에서 값을 캡쳐할 수 있는 간결한 구문으로 작성된, 이름이 없는 클로저

  (명확성이나 의도를 잃지 않고, 동일한 기능을 보다 간결하고 핵심적인 구문으로 *inline closures를 작성하는 방식.) 

 

4) 클로저 표현식 구문 Closure Expression Syntax

*inline closure : 이처럼 함수가 따로 정의된 형태가 아닌, 인자로 직접 들어가 있는 형태의 클로저를 inline closure라고 한다.

쉽게 예를 들어보자면, inline value는 다른 변수에 할당하지 않고 바로 사용되는 값을 의미하는데,

let number = 1

print(number)  // 이렇게 변수에 값을 할당하고 이를 받아오는 방식이 아니라

print (1) // 값을 직접 그대로 갖다 쓰는 것을 말한다.

클로저에서도 마찬가지로 inline closure는 클로저를 다른 변수나 함수에 할당하지 않고 직접 쓰이는 형태를 말한다.

728x90
반응형