고차함수
고차함수란?
고차함수는
다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
를 뜻합니다.
고차함수의 종류
map
filter
reduce
forEach
compactMap
FlatMap
map
기존의 컨테이너 요서에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환합니다.
먼저 enumerated() 메소드를 설명하자면 파이썬의 enumerate 처럼 배열의 원소와 index(offset)을 튜플로 바꿔주는 함수입니다.
let test = ["hi","hello", "nice"]
print(test.enumerated().map({ $0 }))
// 출력: [(offset: 0, element: "hi"), (offset: 1, element: "hello"), (offset: 2, element: "nice")]
바로 위 예시도 튜플들을 고차함수 map을 사용하는데, 클로저에 $0 만 넣어줌으로써 아무것도 안하고 각각 튜플들을 원소로 하는 배열이 생성되었음을 알 수 있었습니다!
func addDivier(_ input: [String]) -> String {
return input.enumerated().map { (index, element) in
index == 4 ? element + "|" : element
}.joined(separator: "|") + "|"
}
이제 제 코드를 보시면 map으로 새로운 컨테이너(배열) 을 만드는데, 조건으로 index == 4
인 경우 element + "|"
를 원소로 만들어 배열에 넣어주는 것을 알 수 있습니다.
filter
기존 컨테이너 요소에 대해 조건에 만족하는 값에 대해서 새로운 컨테이너로 반환합니다.
map과 비슷해보이나, filter는 클로저 내부의 결과값이 true가 되는 원소만을 다시 컨테이너로 만들어줍니다.
// numbers에서 짝수만 추출하기let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var evenNumbers: [Int] = []
for number in numbers {
if number % 2 == 0 {
evenNumbers.append(number)
}
}
let filteredNumbers = numbers.filter { $0 % 2 == 0 }
위 반복문과 아래의 filter는 동일하게 동작하는 코드입니다.
reduce
정의한 클로저를 사용하여 기존 컨테이너의 요소를 결합한 결과를 반환합니다.
reduce는 클로저 내부에 컨테이너의 요소를 어떤 방식으로 누적시킬 지 작성하여 이를 토대로 결과값을 반환하여 줍니다.
// 각 요소의 합 구하기let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0
for number in numbers {
sum += number
}
let sum = numbers.reduce(0) { $0 + $1 }
// 55
reduce함수 소괄호는 초기값을 넣어줄 수 있습니다. 만약 0 대신 10을 넣어주었다면 sum은 65를 반환할 것입니다. $0 + $1
은 현재까지의 결합 결과와 그 다음 원소를 더해준다는 소리입니다.
'Swift' 카테고리의 다른 글
[Swift] CoreData를 CloudKit에 연동하기 (0) | 2025.02.18 |
---|---|
[Swift] 함수형 프로그래밍과 Closure(클로저) (0) | 2024.12.13 |
[Swift] 비동기와 async/await (0) | 2024.12.13 |
[Swift] Core Data 기본(Core Data Stack과 NSManagedObjectContext) (0) | 2024.11.17 |
Electron 앱과 Swift Native 앱간 통신하기 (0) | 2024.09.04 |