[Swift] 클로저와 고차함수

Jade·2023년 7월 9일
0

TIL

목록 보기
1/10

Swift의 클로저고차함수에 대해서 Araboza


1. 클로저(Closure) 기초

  • 클로저는 코드의 블록 이며 일급시민(first-citizen)이다.

  • 함수의 전달인자, 변수, 상수 등으로 저장, 전달이 가능하다.

  • 함수 내부에서 원하는 코드블럭 실행이 가능하다.

// 클로저의 사용
// sum이라는 상수에 클로저를 할당
let sum: (Int, Int) -> Int = { (a: Int, b: Int) in
    return a + b
}
let sumResult: Int = sum(1, 2)
print(sumResult) // 3

2. 다양한 클로저 표현

  • 함수의 마지막 매개변수에 전달되는 클로저는 후행클로저(trailing closure)로 함수 소괄호 밖에 구현이 가능하다.

  • 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입 생략이 가능하다.

  • 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략해도 반환 값으로 취급한다.

  • 전달인자의 이름이 굳이 필요없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달인자 이름($0, $1, $2…) 사용 가능하다.


3. 고차함수(Higher-order function)

  • 고차함수는 다른 함수를 매개변수의 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수이다.

  • 유용한 고차함수는 스위프트 표준 라이브러리에서 제공한다. (map, filter, reduce 등)

  • map

    • 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너를 생성한다.

    • flatMap

      • 컨테이너의 각 요소를 사용하여 지정된 조건을 호출할 때, 순차적인 결과의 배열 반환한다.
      • = 중첩된 배열을 제거하고 평평한 배열(flattened array) 반환한다.
    • compactMap

      • 컨테이너의 각 요소를 조건을 지정하여 호출할 때, nil이 아닌 배열 반환한다.
  • filter

    • 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출한다.
  • reduce

    • 컨테이너 내부의 콘텐츠를 하나로 통합한다.
    • result : 초깃값으로부터 출발하여 마지막 요소까지 순회하는 내내의 결괏값
    • currentItem : 현재 순회하고 있는 요소의 값
profile
응애 iOS 개발자

0개의 댓글