closure란?= 이름이 없는 메소드 (사전 뜻은 폐쇄) ex) ok 버튼을 눌렀을 때 수행해야 하는 코드 블록
1. 클로저는 두 가지로 이루어진 객체입니다. / 하나는 내부 함수이며, 또 다른 하나는 내부 함수가 만들어진 주변 환경입니다. 2. 클로저는 외부 함수 내에서 내부 함수를 반환하고, 내부 함수가 외부 함수의 지역 변수나 상수를 참조할 때 만들어집니다.
즉 클로저란, 내부 함수와 내부 함수에 영향을 미치는 주변 환경을 모두 포함한 '객체'입니다.
무슨 말인지 모르겠으니 예제를 통해 알아보도록 하겠습니다.
Closure의 표현식은 다음과 같습니다.
{ (매개변수) -> 반환 타입 in 실행할 구문}
1. 두 개의 수를 곱하는 Closure을 만들어 보겠습니다.
위 표현식에 따라 어디가 Closure함수인지 보면 (a: Int, b: Int) -> Int 가 (매개변수) -> 반환타입 in return a * b가 실행 구문입니다.
즉 a, b를 Int타입으로 변환받고, a * b를 수행하여 반환하라는 의미 입니다.
2. Closure의 축약형
위 코드와 같이 축약 가능한데, 무엇이 축약 되었나 살펴보면 (a: Int, b: Int) -> Int // 매게 변수 생략 in 삭제 return a * b가 {$0 * $1} // 컴파일러가 반환 타입도 추론할 수 있으므로 return 값도 생략 가능합니다. // 매개변수가 생략됐기 때문에 생략된 매개변수 명 대신 입력받은 인자값을 표시해 주기 위해 $0, $1로 대체
3. 지나친 생략은 자제..하도록 합시다.
코드를 구별하고, 파악하기 쉽게 하기 위해서 최소한의 것만 생략하는 것을 추천합니다. { 매개변수 in 실행 구문}
4. 두 매개변수를 받아 Closure를 통해 두 매개변수가 곱해지는 '함수'를 만들어 보겠습니다.