오늘은 고차함수에 대해 알아 보겠습니다.
다른 함수를 전달인자로 사용하거나 리턴 결과를 함수로 반환하는 함수를 말합니다.
스위프트는 함수를 일급시민으로 취급하는 함수형 프로그래밍 패러다임을 지향하기 때문에 고차함수를 사용할 수 있습니다.
데이터를 변형하여 반환하는 함수이다. 기존의 데이터는 변형되지 않고 새로운 데이터에 변형된 데이터를 넣어 배열로 반환합니다.
let array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//기본형
let arrayString = array.map( {
(value: Int) -> String in return String(value)
} )
//축약형
let arrayString = array.map{String($0)}
print(arrayString) // ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
해당 클로저의 연산에 부합하는 데이터를 추출할 때 사용합니다. map처럼 기존 데이터는 변경되지 않습니다.
let array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//기본형
let evenNumberOfArray = sortedArray.filter( {
(value: Int) -> Bool in return value % 2 == 0
} )
//축약형
let evenNumberOfArray = sortedArray.filter{ $0 % 2 == 0 }
print(evenNumberOfArray) // [2, 4, 6, 8, 10]
reduce는 결합하는 함수입니다. 배열의 요소들을 입력한 클로저에 맞게 연산결과가 리턴됩니다.
문자열 배열일 경우에는 문자열이 리턴됩니다.
let array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//기본형
let sumOfArray = array.reduce(0, {
(value1: Int, value2: Int) -> Int in return value1 + value2
} )
//축약형
let sumOfArray = array.reduce(0, { $0 + $1 })
print(sumOfArray) // 55
다음에는 다른 고차함수인 flatMap과 compactMap에 대해서도 알아보겠습니다.