[Swift] Closures란 무엇일까?

호랭이·2021년 10월 21일
0

🍎 Swift

목록 보기
1/13

클로저란?

  • 코드에서 사용되고 전달될 수 있는 기능이 자체 포함된 블록
  • 일급객체이다(일급객체는 전달인자로 사용할 수 있고 변수/상수 등으로 저장하거나 전달할 수 있으며 함수의 반환값이 될 수도 있다.
  • 참조타입이다.
  • 함수는 이름이 있는 클로저이다.

표현방법

일반적인 표현방법은 다음과 같다.

{ (parameters) -> return type in
statements
}

참고. 함수로 정의된 형태가 아닌 인자로 들어가 있는 형태의 클로저를 inline closures라고 한다.

기본형태

기본: 클로저 축약 문법(Closure Expression Syntax)

reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 } )

축약 1단계: 문맥에서 타입 추론(Inferring Type From Context)

sorted(by:)의 메소드에서 이미 String타입 2개가 들어와서 Bool타입이 반환되는 것을 알기 때문에 타입 생략

reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

축약2단계: 단일 표현 클로저에서의 암시적 반환(Implicit Returns from Single-Express Closures)

단일 표현 클로저에서는 반환 키워드를 생략할 수 있다.

reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

축약3단계: 인자 이름 축약 (Shorthand Arguments Names)

swift는 인라인 클로저에 자동으로 축약 인자 이름을 제공하는데 이 인자를 사용하면 인자 값을 순서대로 $0, $1, $2 등으로 사용할 수 있다. 축약 인자 이름을 사용하연 인자 값과 그 인자로 처리할 때 사용하는 인자가 같다는 것을 알기 때문에 인자를 입력받는 부분과 in 키워드 부분을 생략할 수 있다.

reversedNames = names.sorted(by: {  $0 > $1 )

축약4단계: 연산자 메소드 (Operator Methods)

Swift의 String타입 연산자에는 String끼리 비교할 수 있는 비교연산자가 구현되어있어서 축약이 가능하다.

reversedNames = names.sorted(by: >)
profile
삐약

0개의 댓글