
TIL 9일 차 - Swift 문법 고차함수
고차함수란?
-> 다른 함수를 인자로 받거나, 함수를 반환하는 함수를 의미함
이 고차함수를 통해 더 효율적이고 간결한 코드 작성 가능
컬렉션타입(Array, Set, Dictionary 등)에서 사용하는 고차함수를 통해 데이터를 변환, 필터링, 축소하는 작업을 간편하게 수행 가능함
map, filter, reduce, compactMap, flatMap 등이 있음.
1. map
- 배열의 각 요소를 변환하여 새로운 배열을 생성함
- 각 요소를 변형하는 작업을 반복하며, 변형된 값을 새로운 배열로 반환함
let numbers = [1, 2, 3, 4]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // 1 4 9 16 출력
// 만약 map이 없었다면
/*
let numbers = [1, 2, 3, 4]
var squaredNumbers = [Int]()
for number in numbers {
squaredNumbers.append(number * number)
}
*/
2. filter
- 배열에서 주어진 조건에 맞는 요소들만 걸러내어 새로운 배열로 반환함 (조건이 true인 값만 반환함)
let numbers = [1, 2, 3, 4, 5, 6]
let evenNumbers = numbers.filter { $0 % 2 == 0} // 짝수 조건
print(evenNumbers) // 2 4 6 짝수만 출력
3. reduce
- 배열의 모든 요소를 하나로 합쳐 하나의 값을 반환함
- 초기값을 주어야 함
// numbers 안에 있는 숫자들을 앞에서부터 하나씩 더해서 최종 결과를 0에 누적함
let numbers = [1, 2, 3, 4]
let sum = numbers.reduce(0) { $0 + $1 }
// reduce(0) 은 0부터 시작해서 계산하라는 뜻
// { $0 + $1 }에서 $0: 지금까지 계산된 누적값, $1: 지금 새로 들어온 배열의 값
print(sum) // 10 출력
4. compactMap
- 옵셔널 값을 언래핑하고 nil을 제거한 배열을 반환한다.
map -> 모양 바꾸기
compact -> nil 제거하기
즉 변환(map) + 걸러내기(filter)를 동시에 하는 함수임
쉽게 말하면 변환하다가 실패(nil) 한 건 버려라
let stringNumbers = ["1", "2", "three", "4", "five"]
let numbers = stringNumbers.compactMap { Int($0) }
// $0은 배열에서 하나씩 꺼낸 문자열임
// Int($0)은 Int("1") -> 1 변환 성공, Int("three")는 nil로 변환 실패됨
// 따라서 변환에 실패한 "three"와 "five"는 버려짐
print(numbers) // [1, 2, 4]
5. flatMap
- 중첩된 컬랙션을 평평하게 만드는 데에 사용됨 (2차원 배열 -> 1차원 배열로 변환)
let nestedArray = [[1, 2, 3], [4, 5], [6, 7, 8]]
let flatArray = nestedArray.flatMap { $0 }
print(flatArray)
// [1, 2, 3, 4, 5, 6, 7, 8] 출력'iOS > Swift ' 카테고리의 다른 글
| [iOS-Swift] 프로토콜 (0) | 2026.01.08 |
|---|---|
| [iOS-Swift] 인스턴스 (0) | 2026.01.07 |
| [iOS-Swift] 고급 데이터 타입(Collection Type) (0) | 2026.01.06 |
| [iOS-Swift] 함수 (0) | 2026.01.06 |
| [iOS-Swift] 조건문 (0) | 2026.01.06 |