고차함수 (map, filter, reduce)

hoBahk·2021년 11월 20일

오늘은 고차함수에 대해 알아 보겠습니다.

고차함수란?

다른 함수를 전달인자로 사용하거나 리턴 결과를 함수로 반환하는 함수를 말합니다.
스위프트는 함수를 일급시민으로 취급하는 함수형 프로그래밍 패러다임을 지향하기 때문에 고차함수를 사용할 수 있습니다.

map

데이터를 변형하여 반환하는 함수이다. 기존의 데이터는 변형되지 않고 새로운 데이터에 변형된 데이터를 넣어 배열로 반환합니다.

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"]

filter

해당 클로저의 연산에 부합하는 데이터를 추출할 때 사용합니다. 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

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에 대해서도 알아보겠습니다.

profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글