• Feed
  • Explore
  • Ranking
/
/
    🦅 Swift

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

    Swiftios
    지
    지성
    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]






    - 컬렉션 아티클