고차함수
- 고차함수(Higher-order Function)는 함수를 인자로 받거나 함수를 반환하는 함수이다
- Swift에서는 함수형 프로그래밍의 기본으로
map, filter, reduce 같은 고차함수를 자주 사용한다
- 배열, 딕셔너리, 세트 등
Sequence 또는 Collection 프로토콜을 따르는 타입에서 사용 가능하다
map 함수
map 함수는 기존 배열의 각 요소를 특정 방식으로 변형하여 새로운 배열을 생성하는 함수이다
- 내부에 전달되는 클로저가 각 요소를 어떻게 매핑할지 정의한다
let numbers = [1, 2, 3, 4, 5]
let stringMapped = numbers.map { (num) in
return "숫자: \(num)"
}
let conciseMapped = numbers.map { "숫자: \($0)" }
filter 함수
filter 함수는 배열의 각 요소 중 조건을 만족하는 값만 추출하여 새로운 배열을 만든다
- 클로저의 반환값이
true인 요소만 결과 배열에 포함된다
let names = ["Apple", "Black", "Circle", "Dream", "Blue"]
let filteredNames = names.filter { $0.contains("B") }
let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter { $0 % 2 == 0 }
reduce 함수
reduce 함수는 배열의 모든 요소를 하나로 결합하여 단일 값을 생성하는 함수이다
- 초깃값과 결합 방식(클로저)을 인자로 받는다
let nums = [1, 2, 3, 4, 5]
let sum = nums.reduce(0) { (total, value) in
return total + value
}
let compactSum = nums.reduce(0) { $0 + $1 }
let difference = nums.reduce(100) { $0 - $1 }
map / filter / reduce 조합 예제
- 홀수만 골라서 제곱하고, 그 총합을 구하는 코드
let values = [1, 2, 3, 4, 5]
let result = values
.filter { $0 % 2 != 0 }
.map { $0 * $0 }
.reduce(0) { $0 + $1 }
고차함수 비교 요약
| 함수 | 설명 | 반환 결과 |
|---|
map | 각 요소를 변형 | 새로운 배열 |
filter | 조건을 만족하는 요소만 추출 | 새로운 배열 |
reduce | 모든 요소를 누적 | 단일 값 |
고차함수 활용 예제 확장
let scores = [65, 70, 85, 90, 100]
let average = scores
.filter { $0 >= 70 }
.reduce(0) { $0 + $1 } / 4
filter로 조건에 맞는 점수를 추출하고 reduce로 합산한 후 평균 계산에 활용
- 실무에서도 데이터 전처리 및 통계 처리에 자주 사용된다
요약
- 고차함수는 함수를 인자로 받거나 반환하는 함수이다
map은 요소를 변형하고, filter는 조건에 따라 걸러내며, reduce는 누적하여 단일 값을 생성한다
- 고차함수는 가독성이 높고 함수형 스타일의 프로그래밍을 가능하게 한다
- 실무에서도 다양한 데이터 처리 작업에 널리 활용된다