[Swift] 고차함수(Higher-order function) 이해하기

2024. 6. 27. 22:16·Apple/Swift
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

이번 포스팅에서는 고차함수에 대해서 살펴보겠습니다.

 

Swift는 함수형 프로그래밍 패러다임을 지원하는 언어로, 고차함수를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.

 

그럼 바로 시작하겠습니다!

 

고차함수(Higher-order function)란?

고차함수(Higher-order function)는 다른 함수를 매개변수로 받거나 함수 실행 결과를 함수로 반환하는 함수입니다.

 

Swift의 함수는 1급 객체(first class object) 또는 1급 시민(first class citizen)이기 때문에 함수의 매개변수로 전달할 수 있으며, 함수의 리턴값으로 반환할 수 있습니다.

 

Swift의 대표적인 고차함수는 맵(map), 필터(filter), 리듀스(reduce)가 있는데 각각의 함수에 대해서 살펴보겠습니다.

 

맵(map)

map 함수는 배열의 각 요소에 동일한 변환을 적용하여 새로운 배열을 생성합니다. 즉, 배열의 모든 요소에 대해 주어진 함수를 호출하고, 그 결과를 새로운 배열로 반환합니다.

 

사용법

func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

 

예제

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16, 25]
  • numbers: 정수 배열 [1, 2, 3, 4, 5]
  • map 함수는 배열의 각 요소를 순회하며 클로저 { $0 * $0 }를 적용합니다.
  • 결과적으로 squaredNumbers 배열에는 [1, 4, 9, 16, 25]가 저장됩니다.

 

 

필터(filter)

filter 함수는 주어진 조건에 맞는 요소들만으로 구성된 새로운 배열을 반환합니다. 즉, 배열의 각 요소에 대해 조건을 체크하고, 그 조건을 만족하는 요소들만을 선택합니다.

예제

let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]

 

  • numbers: 정수 배열 [1, 2, 3, 4, 5]
  • filter 함수는 배열의 각 요소를 순회하며 클로저 { $0 % 2 == 0 }를 적용합니다.
  • 결과적으로 evenNumbers 배열에는 [2, 4]가 저장됩니다.

 리듀스(reduce)

reduce 함수는 배열의 모든 요소를 하나의 값으로 합치는 작업을 수행합니다. 초기값과 결합 함수(combine closure)를 인수로 받아 배열의 각 요소를 차례로 결합하여 단일 값을 생성합니다.

 

예제

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15

 

  • numbers: 정수 배열 [1, 2, 3, 4, 5]
  • 먼저 filter 함수를 사용하여 짝수인 요소들만 선택합니다.
  • 그 다음 map 함수를 사용하여 선택된 요소들을 제곱합니다.
  • 최종적으로 squaredEvenNumbers 배열에는 [4, 16]이 저장됩니다.

 

결론

map, filter, reduce는 Swift에서 컬렉션을 다룰 때 매우 유용한 고차함수들입니다. 이 함수들은 코드의 가독성과 효율성을 크게 향상시킬 수 있으며, 다양한 방식으로 결합하여 강력한 기능을 구현할 수 있습니다. 

 

오늘은 여기까지 :)


감사합니다.

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

728x90
반응형

'Apple > Swift' 카테고리의 다른 글

[Swift] 동시성(Concurrency) 톺아보기 (2/2)  (4) 2024.07.25
[Swift] 동시성(Concurrency) 톺아보기 (1/2)  (0) 2024.07.23
[Swift] Implicitly Unwrapped Optional (암묵적 옵셔널 추출)과 Optional Chaining (옵셔널 체이닝)  (2) 2024.04.11
[Swift] 배열(Array)  (1) 2024.03.13
[Swift] 초기화(Initializers) 알아보기 (6) - Failable Initalizers  (0) 2024.02.22
'Apple/Swift' 카테고리의 다른 글
  • [Swift] 동시성(Concurrency) 톺아보기 (2/2)
  • [Swift] 동시성(Concurrency) 톺아보기 (1/2)
  • [Swift] Implicitly Unwrapped Optional (암묵적 옵셔널 추출)과 Optional Chaining (옵셔널 체이닝)
  • [Swift] 배열(Array)
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (213)
      • Apple (131)
        • iOS (23)
        • visionOS (4)
        • Swift (70)
        • UIKit (2)
        • SwiftUI (24)
        • RxSwift (2)
        • Xcode (5)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로퍼티 래퍼
    visionOS
    스위프트
    운영체제
    티스토리챌린지
    클래스
    SWIFT
    swiftUI
    연산자
    네트워크
    함수
    Vision Pro
    배열
    제어문
    옵셔널
    오블완
    Apple
    UIKit
    디자인패턴
    코딩테스트
    ios
    프로세스
    변수
    이니셜라이저
    프로그래머스
    Initializers
    combine
    자바스크립트
    Xcode
    비동기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] 고차함수(Higher-order function) 이해하기
상단으로

티스토리툴바