일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- protocol
- calendar
- error
- NotificationCenter
- Git
- ScrollView
- http
- class
- list
- struct
- 고차함수
- 회고
- uikit
- Observer
- escaping
- apns
- viewlifecycle
- Refresh
- SWIFTUI
- self
- 글또
- 화면전환
- Switch
- singleton
- mvvm
- array
- IOS
- PushNotification
- SWIFT
- segue
- Today
- Total
seong_hye, the developer
Swift)문법 정리 - 고차함수 본문
📘 Swift 문법 정리: 고차함수
Swift 문법 중 고차함수에 대해 정리한 글입니다.
🔹 1. 문법 설명
Swift에서 매우 핵심적인 개념으로 컬렉션 처리 (Array, Set, Dictionary) 에 자주 사용됩니다.
다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 고차함수라고 합니다.
for문보다 코드가 간결하고, 의도를 명확하게 표현할 수 있다는 장점이 있습니다.
UI 코드에서도 종종 활용되며 SwiftUI에서도 자주 활용됩니다.
🔹 2. 주요 고차 함수와 코드 예제
map
콜렉션 내부의 데이터를 가공하여 새로운 콜렉션을 생성하는 함수
인자를 클로저로 받아 컨테이너 내부에 들어있는 요소들의 값을 어떻게 바꿀 것인지 정합니다.
let numbers = [1, 2, 3, 4]
let doubled = numbers.map {$0 * 2}
print(doubled) // [2, 4, 6, 8]
📌 map은 기존 컬렉션의 각 요소를 클로저로 가공한 결과로 새 컬렉션을 만듭니다.
filter
콜렉션 내부에서 조건에 맞는 데이터들만 골라 새로운 콜렉션을 생성하는 함수
클로저를 인자로 받고 이 클로저 내부에는 어떤 데이터를 포함시킬지 그 조건을 정의합니다.
let numbers = [1, 2, 3, 4, 5]
let even = numbers.filter { $0 % 2 == 0 }
print(even) // [2, 4]
📌 filter는 조건을 만족하는 요소만 추려서 새로운 컬렉션을 만듭니다.
reduce
콜렉션 내부의 데이터들을 하나로 통합시키는 함수로 두 개의 인자를 받습니다.
(첫번째 인자: 통합할 데이터의 초기값 / 두번째 인자: 클로저)
스위프트에서는 사칙연산자도 함수(클로저)이므로 연산자만 넣어주어도 동일하게 동작합니다.
let numbers = [1, 2, 3, 4]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 10
📌 reduce(초기값) { 누적값, 현재값 in ...}
CompactMap
옵셔널 바인딩을 지원하는 map
nil이 섞여있는 콜렉션에서 nil을 제외한 값에만 새로운 콜렉션을 만들어 낼 수 있습니다
let strings = ["1,"2","Swift","3]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [1,2,3]
📌 nil이 반환되는 요소는 제거되며, 타입 변환 등에 유용하게 사용됩니다.
FlatMap
map + flatten(평탄화)의 합성어로
2차원 배열에 나눠져있는 데이터들을 1차원 배열로 합쳐주는 함수
let array = [[1, 2],[3, 4],[5, 6]]
let flattened = array.flatMap { $0 }
print(flattened) // [1, 2, 3, 4, 5, 6]
📌 중첩 배열을 한 단계 평탄화하게 됩니다.
sorted
콜렉션 내부의 인자들을 조건에 맞게 정렬해주는 함수
let names = ["Jack","Alex","Chris"]
let sortedNames = names.sorted { $0 < $1 }
print(sortedNames) // ["Alex", "Chris", "Jack"]
📌 오름차순, 내림차순, 사용자 정의 기준으로 정렬 가능
ForEach
For-in 구문처럼 콜렉션의 각 요소들을 뽑아서 활용할 수 있는 함수
새로운 콜력센이나 데이터를 반환하지 않기 때문에 단순한 순회의 용도로 사용하기에 적합합니다.
⚠️ for- in과의 차이점
고차함수에 포함되어 있기 때문에 글로벌 스코프에서 사용했을 때도 retun을 통해 현재 반복을 종료하고
다음 반복으로 이어나갈 수 있습니다.
~> continue처럼 동작해요
let names = ["A", "B", "C"]
names.forEach {print($0)} //"A","B","C"
📌일반 for-in 반복문과 같지만, break가 불가능하고 반환값이 없습니다.
🔹3. 실전 예제: 고차함수 조합
let scores = [ 45, 80, 60, 90, 30 ]
let passedNames = scores
.filter{$0 >= 60} // 60점 이상만
.map{"\($0)점 합격"}// 문자열로 변환
.sorted() // 오름차순 정렬
print(passedNames) // ["60점 합격", "80점 합격", "90점 합격"]
📘마무리 정리
- swift의 고차 함수는 함수형 프로그래밍 스타일을 가능하게 한다.
- for문보다 코드가 간결하고 의도를 명확하게 표현할 수 있다
'IOS' 카테고리의 다른 글
Swift) 문법 정리 - guard문 (0) | 2022.07.19 |
---|---|
Swift) 문법 정리 - inout 키워드 (0) | 2022.07.19 |
Swift) 문법 정리 - 클로저 (Closure) (0) | 2022.07.12 |
Swift) 문법 정리 - 에러 처리(Error Handling) (0) | 2022.07.12 |
Swift) 문법 정리 - 열거형(Enum) (0) | 2022.07.12 |