안녕하세요! 피피아노입니다 🎵
이번 포스팅에서는 고차함수에 대해서 살펴보겠습니다.
Swift는 함수형 프로그래밍 패러다임을 지원하는 언어로, 고차함수를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.
그럼 바로 시작하겠습니다!
고차함수(Higher-order function)란?
고차함수(Higher-order function)는 다른 함수를 매개변수로 받거나 함수 실행 결과를 함수로 반환하는 함수입니다.
Swift의 함수는 1급 객체(first class object) 또는 1급 시민(first class citizen)이기 때문에 함수의 매개변수로 전달할 수 있으며, 함수의 리턴값으로 반환할 수 있습니다.
Swift의 대표적인 고차함수는 맵(map), 필터(filter), 리듀스(reduce)가 있는데 각각의 함수에 대해서 살펴보겠습니다.
맵(map)
map 함수는 배열의 각 요소에 동일한 변환을 적용하여 새로운 배열을 생성합니다. 즉, 배열의 모든 요소에 대해 주어진 함수를 호출하고, 그 결과를 새로운 배열로 반환합니다.
사용법
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
예제
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16, 25]
- numbers: 정수 배열 [1, 2, 3, 4, 5]
- map 함수는 배열의 각 요소를 순회하며 클로저 { $0 * $0 }를 적용합니다.
- 결과적으로 squaredNumbers 배열에는 [1, 4, 9, 16, 25]가 저장됩니다.
필터(filter)
filter 함수는 주어진 조건에 맞는 요소들만으로 구성된 새로운 배열을 반환합니다. 즉, 배열의 각 요소에 대해 조건을 체크하고, 그 조건을 만족하는 요소들만을 선택합니다.
예제
let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]
- numbers: 정수 배열 [1, 2, 3, 4, 5]
- filter 함수는 배열의 각 요소를 순회하며 클로저 { $0 % 2 == 0 }를 적용합니다.
- 결과적으로 evenNumbers 배열에는 [2, 4]가 저장됩니다.
리듀스(reduce)
reduce 함수는 배열의 모든 요소를 하나의 값으로 합치는 작업을 수행합니다. 초기값과 결합 함수(combine closure)를 인수로 받아 배열의 각 요소를 차례로 결합하여 단일 값을 생성합니다.
예제
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15
- numbers: 정수 배열 [1, 2, 3, 4, 5]
- 먼저 filter 함수를 사용하여 짝수인 요소들만 선택합니다.
- 그 다음 map 함수를 사용하여 선택된 요소들을 제곱합니다.
- 최종적으로 squaredEvenNumbers 배열에는 [4, 16]이 저장됩니다.
결론
map, filter, reduce는 Swift에서 컬렉션을 다룰 때 매우 유용한 고차함수들입니다. 이 함수들은 코드의 가독성과 효율성을 크게 향상시킬 수 있으며, 다양한 방식으로 결합하여 강력한 기능을 구현할 수 있습니다.
오늘은 여기까지 :)
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > Swift' 카테고리의 다른 글
[Swift] 동시성(Concurrency) 톺아보기 (2/2) (2) | 2024.07.25 |
---|---|
[Swift] 동시성(Concurrency) 톺아보기 (1/2) (0) | 2024.07.23 |
[Swift] Implicitly Unwrapped Optional (암묵적 옵셔널 추출)과 Optional Chaining (옵셔널 체이닝) (0) | 2024.04.11 |
[Swift] 배열(Array) (0) | 2024.03.13 |
[Swift] 초기화(Initializers) 알아보기 (6) - Failable Initalizers (0) | 2024.02.22 |