[Swift] 고차함수(Higher-Order Functions)

Swiftios
avatar
2025.02.25
·
4 min read

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]






- 컬렉션 아티클