본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 고차함수(higher-order function)

 

 

 

 

고차함수(higher-order function)

 

 

 

목차 접기

고차함수(higher-order function)

 

 

💡 고차함수(higher-order function)

 

- 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 의미

   → 즉, 함수를 인자로 받거나 함수를 반환하는 함수

- 고차 함수를 사용하면 코드를 간결하고 모듈화할 수 있으며, 함수형 프로그래밍의 기본 개념 중 하나

- 주요한 고차 함수로는 map, filter, reduce, flatMap, compactMap 등이 있음

 

 

 map 

- 배열이나 컬렉션 등의 각 요소에 동일한 연산을 적용하여 새로운 배열을 생성하는 함수

- 주어진 클로저를 배열의 각 요소에 적용하고, 그 결과를 새로운 배열로 반환함

 

let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map { $0 * 2 } // [2, 4, 6, 8, 10]

 

 

 

 


 

 

 filter 

- 주어진 조건에 따라 배열이나 컬렉션 등에서 필터링된 요소들로 이루어진 새로운 배열을 생성하는 함수

- 조건을 만족하는 요소만 선택하여 새로운 배열을 반환함

 

let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 } // [2, 4]

 

 

 


 

 

 reduce 

- 배열이나 컬렉션의 모든 요소를 하나의 값으로 합치는 함수

- 각 요소를 순회하면서 주어진 클로저를 적용하여 하나의 값을 계산하고 반환함

 

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 } // 15

 

 

 


 

 

 CompactMap 

- 배열이나 컬렉션에서 맵핑된 결과 중에서 nil이 아닌 값들을 필터링하여 새로운 배열을 생성하는 함수

- map 함수와 비슷하지만, 옵셔널 값을 다룰 때 특히 유용함

 

let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let compactMapped = possibleNumbers.compactMap { str in Int(str) } // [1, 2, 5]

 

 

 


 

 

 FlatMap 

- 배열이나 컬렉션에서 맵핑된 결과 중에서 옵셔널 값을 풀어내어(nil이 아닌 경우) 새로운 배열을 생성하는 함수

- 각 요소에 대해 매핑된 결과를 하나의 배열로 합치는 역할을 함

→ 쉽게 말하면 중첩된 배열을 제거하고 평평한 배열(flattened array)을 리턴

 

2차원 배열 예시

let numbers = [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
let flatMapped = numbers.flatMap { $0 }
print(flatMapped) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

3차원 배열 예시

let numbers = [[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]]

let flatMapped = numbers.flatMap { $0 }
print(flatMapped) // [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]

let doubleFlatMapped = flatMapped.flatMap { $0 }
print(doubleFlatMapped) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


// 또는 


let numbers = [[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]]

let flatMapped = numbers.flatMap { $0 }.flatMap { $0 }
print(flatMapped) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

 

 

 

 

 

참고

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31