고차함수(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]
' 𝗔𝗣𝗣𝗟𝗘 > SWIFT : GRAMMAR' 카테고리의 다른 글
Swift 기초 문법 - ARC와 메모리 누수(Automatic Reference Counting) (0) | 2024.03.14 |
---|---|
Swift 기초 문법 - 예외 처리(Exception Handling) (0) | 2024.03.13 |
Swift 기초 문법 - 클로저(Closure) (0) | 2024.03.13 |
Swift 기초 문법 - 접근 제한자(access control) (2) | 2024.03.12 |
Swift 기초 문법 - 타입 캐스팅(Type Casting) (0) | 2024.03.12 |