[iOS-Swift] 고차함수

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