[Swift] 고차 함수(Higher-order function) - map, filter, reduce

안녕하세요~ 차니에요!

 

오늘은 Swift의 고차 함수를 알아볼게요.

이전 포스팅 글 들과 연관되는 부분이 많으니 이해가 잘 안되시는 부분이 있다면 보고 오시길 추천드려요!

 

2021.07.27 - [iOS/Swift] - [Swift] 함수에 대해 알아보자 (기본편)

2021.07.23 - [iOS/Swift] - [Swift] 일급 객체(First-class citizen)

2021.07.26 - [iOS/Swift] - [Swift] 클로저(Closure)에 대해 알아보자.

 

1. 고차 함수(Higher-order function)란?

함수의 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수

지난 일급 객체편에서 스위프트의 함수는 일급 객체이기 때문에 함수의 인자로, 결과(리턴값)로 사용할 수 있다고 했는데요.

이러한 특성을 활용해 만들어진 함수가 고차 함수이고 대표적인 고차 함수 3종(map, filter, reduce)에 대해 더 알아보도록 할게요.

고차 함수를 이용하게되면 클로저를 통해 코드 재사용이 용이해지고 코드가 간결해집니다.

 

앞으로 테스트 진행을 위한 배열을 하나 선언하였습니다.

let arr: [Int] = [0, 1, 2, 3, 4, 5]

 

2. map

컬렉션 데이터를 변형하여 처리 결과를 반환합니다.
let newArr = arr.map({ (num: Int) -> Int in
    return num + 2
})

arr 컬렉션 요소(num)에 순차적으로 접근하여, 각 요소에 2를 더해 반환하였습니다.

결과는 예상한대로 각 요소에 2씩 더해진 새로운 배열이 반환됩니다.

위 코드에 후행 클로저(trailing closure;)와 축약을 적용하면 아래와 같이 호출할 수 있습니다.

 

let newArr = arr.map { $0 + 2 }

() 중괄호를 생략한 후행 클로저이며 요소 변수를 $0으로 사용하고 return 키워드가 생략되었습니다.

이 형태는 많이 사용되는 형태이니 눈에 익혀두는 것이 좋습니다.

 

3. filter

컬렉션 내부의 값을 필터링한 결과를 반환합니다.
let newArr = arr.filter {$0 % 2 == 0}

필터링하고자 하는 항목이 포함되는지 안되는지 여부를 Bool 값으로 반환합니다.

arr 컬렉션 요소에 순차적으로 접근하여, 각 요소의 짝수 값만 반환하였습니다.

 

4. reduce

컬렉션 내부의 값을 연산 처리한 결과를 반환합니다.
let newArr1 = arr.reduce(0, +)
let newArr2 = arr.reduce(1, {$0 + $1})
let newArr3 = arr.reduce(1) {$0 + $1}

초기 값이 0번 째 인덱스이며 순차적으로 더하기 연산을 처리한 결과 값이 반환됩니다.

arr[0] == 0 이므로, 결과 값은 모두 15가 나옵니다.

이상으로 포스팅 마치겠습니다.

이해가 안되거나 틀린 부분이 있다면 댓글로 남겨주세요!