Swift에서는 고차함수(Higher-Order Functions)를 사용하여 배열 및 컬렉션 데이터를 간결하고 효율적으로 처리할 수 있다.
고차함수는 함수를 매개변수로 전달하거나 반환할 수 있는 함수를 의미하며, 대표적으로 map
, filter
, reduce
, compactMap
, flatmap
등이 있다.
고차함수(Higher-Order Functions)
고차함수란?
함수를 매개변수로 전달하거나 변환하는 함수
배열 및 컬렉션 데이터를 더 간결하고 효율적으로 처리 가능
고차함수를 사용하면 좋은 점
코드가 짧아지고 가독성이 향상됨
반복문을 줄이고 선언형 코드 스타일 유지 가능
불변성을 유지하며 함수형 프로그래밍 방식 적용 가능
주요 고차함수
map
– 배열의 각 요소를 변환
기존 for
반복문을 사용한 변환
let numbers = [1, 2, 3, 4, 5]
var squaredNumbers: [Int] = []
for number in numbers {
squaredNumbers.append(number * number)
}
print(squaredNumbers) // [1, 4, 9, 16, 25]
map
을 사용한 변환
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16, 25]
filter
– 특정 조건을 만족하는 요소만 필터링
기존 for
반복문을 사용한 필터링
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var evenNumbers: [Int] = []
for number in numbers {
if number % 2 == 0 {
evenNumbers.append(number)
}
}
print(evenNumbers) // [2, 4, 6, 8, 10]
filter
를 사용한 필터링
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4, 6, 8, 10]
reduce
– 배열 요소를 하나의 값으로 축소(합계, 곱 등 계산)
기존 for
반복문을 사용한 합계 계산
let numbers = [1, 2, 3, 4, 5]
var sum = 0
for number in numbers {
sum += number
}
print(sum) // 15
reduce
를 사용한 합계 계산
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15
reduce(0)
→ 초기값을 0으로 설정{ $0 + $1 }
→ 배열 요소들을 하나씩 더함
문자열 합치기 예제
let words = ["Swift", "is", "awesome"]
let sentence = words.reduce("") { $0 + " " + $1 }
print(sentence) // " Swift is awesome"
compactMap
– nil이 포함된 배열에서 nil 제거 및 변환
옵셔널이 포함된 배열에서 nil 제거
let numbers = ["1", "2", "abc", "3"]
let validNumbers = numbers.compactMap { Int($0) }
print(validNumbers) // [1, 2, 3]
"abc"는 변환되지 않으므로 nil이 되고,
compactMap
이 nil을 제거함
옵셔널 배열에서 nil 제거
let optionalNumbers: [Int?] = [1, nil, 3, nil, 5]
let nonOptionalNumbers = optionalNumbers.compactMap { $0 }
print(nonOptionalNumbers) // [1, 3, 5]
flatMap
– 중첩된 배열을 1차원 배열로 변환
2차원 배열을 1차원 배열로 변환
let nestedArray = [[1, 2, 3], [4, 5], [6, 7, 8]]
let flattenedArray = nestedArray.flatMap { $0 }
print(flattenedArray) // [1, 2, 3, 4, 5, 6, 7, 8]