seong_hye, the developer

Swift)문법 정리 - 고차함수 본문

IOS

Swift)문법 정리 - 고차함수

seong_hye 2022. 7. 12.

 

📘 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문보다 코드가 간결하고 의도를 명확하게 표현할 수 있다
Comments