iOS/Common

[Swift] 고차함수(map, filter, reduce)를 스윽 핥아봅시다

TDCIAN 2022. 6. 8. 14:38

 

고차함수(Higher-order function)는

다른 함수를 전달인자로 받거나, 함수 실행의 결과를 함수로 반환하는 함수를 뜻합니다!

 

Swift의 함수(클로저)가 일급시민이므로 함수의 전달 인자로 전달할 수 있고, 함수의 결괏값을 반환할 수 있습니다.

 

고러면 바로 고차함수 map, filter, reduce에 대해 알아봅시다!

 

(1) map

 

map은 뭘까요?

내부의 요소들을 변경(변형이 좀 더 정확합니다)해서 이를 담아 돌려주는 것입니다.

 

바로 봅시다!

감이 잡히시나요? Numbers 배열 내부에 있는 각 요소에 대하여 mapNumbers1에서는 1을 더해주었고, mapNumbers2에서는 아예 String으로 변환하여 사용해주고 있습니다.

 

이런 식으로 축약해서 사용할 수도 있습니다.

 

심지어 섞어 쓸 수도 있습니다.

 

 

아주 유용하쥬?

 

(2) filter

 

다음으로 filter를 알아봅시다. filter는 설명 없어도 감이 오죠?

그래서인지 설명이 없네요ㅋㅋㅋ

 

바로 봅시다!

 

 

여러 이름(문자열)이 들어 있는 배열 중에서 “김”을 포함한 이름만 걸러내기 위해 filter를 사용했습니다.

 

filteredName2에서는 names 배열의 요소들 중 문자열의 길이가 4인(네 글자인) 이름들만 걸렀습니다.

이제 어떻게 써야 할지 감이 잡히시죠?

 

 

(3) reduce

 

마지막으로 reduce를 봅시다.

reduce는 말 그대로 줄인다는 뜻이지요? 배열 내부의 요소들을 하나로 통합하여 돌려줍니다

 

여러분들이 1부터 10까지 더해야 할 때, 어떤 방법이 있을까요?

 

이렇게 반복문 사용해서 더할 수 있겠지요?

하지만 reduce를 쓴다면 더 짧게 쓸 수 있습니다.

엄청 짧죠?

 

무슨 일이 일어난 건지 알아보기 위해 좀 더 풀어서 써봅시다.

 

 

어떠세요, 이제 감이 좀 잡히시나요? 이제 축약을 좀 해볼까요?

 

 

물론 reduce1보단 길지만, reduce2에 비하면 아주 많이 짧아졌죠?

어떻게 사용해야 하는지 감이 오시나요??

 

 

오늘 map, filter, reduce 이렇게 세 가지 Swift의 고차 함수에 대해 알아봤습니다!

 

만약 map을 써본 김에 flatMap과 compactMap에 대해서도 알고 싶으시다면 다음 포스트를 확인해보시면 좋을 것입니다!

 

그럼 화이팅 합시다요!

 

 

 

출처: https://yagom.github.io/swift_basic/contents/22_higher_order_function/