Language/Swift

Swift 고차함수

Greensky0026 2021. 3. 15. 15:36
반응형

 고차함수란 다른 함수를 전달인자로 받거나, 함수실행의 결과로

함수를 반환하는 함수를 뜻합니다.

함수의 외부에서 실행 흐름을 변형할 수 있기 때문에

재활용성 및 재사용성을 높여 주는 편리한 함수라고 할 수 있겠습니다.

 이중 대표적인 map, filter, reduce를 공부해보도록 하겠습니다.

 

 

map

컬렉션 내부의 기존 데이터를 변형해 새로운 컬렉션을 생성합니다.

fucn map<T>(_ transform: (String) throws -> T) rethrows -> [T]

 

 

예제

 

let numArr: [Int] = [1, 2, 3, 4, 5]

var squardArr: [Int] = []
var stringArr: [String] = []

 

for문 사용

for num in numArr{
    squardArr.append( num * num)
    stringArr.append( "\(num)" )
}

print (squardArr) //[1, 4, 9, 16, 25]
print (stringArr) //["1", "2", "3", "4", "5"]

map 사용

squardArr = numArr.map({ (num: Int) -> Int in 
	return (num * num)
})

stringArr = numArr.map({ (num: Int) -> String in
	return "\(num)"
})

print (squardArr) // [1, 4, 9, 16, 25]
print (stringArr) // ["1", "2", "3", "4", "5"]

//$0은 배열의 0번째 요소부터 마지막 요소까지 순차적으로 대입해 계산한다는 뜻입니다.
squardArr = squardArr.map{ $0 * $0 } //[1, 16, 81, 256, 625]
print (squardArr)

map은 배열 내부의 원소를 하나씩 매핑해주는 느낌인 것 같습니다.

 

 

filter

filter 함수는 이름그대로 내부의 값을 필터링해서 추출합니다.

func filter(_ isIncluded: (String) throws -> Bool) rethrows -> [String]

 

 

위의 numArr에서 홀수만 출력해보겠습니다.

 

for 구문 사용

for num in numArr{
	if num % 2 == 1 {
		filtered.append(num)
	}
}
print (filtered) //[1, 3, 5]

 

filter 메서드 사용

let oddArr: [Int] = numArr.filter { (num: Int) -> Bool in
	return num % 2 == 1
} 
print (oddArr) // [1, 3, 5]

let oddArr2: [Int] = numArr.filter{ ($0 % 2 == 1) }
print (oddArr) // [1, 3, 5]

 

reduce

함수명 그대로 축약시키는 역할을 합니다.

컨테이너 내부의 콘텐츠를 하나로 통합합니다.

// initialResult : 초기값
func reduce<Result>(_ initialResult: Result, _ netPartialResult: (Reuslt, Int) 
throws -> Result) rethrows -> Result

 

for문 사용

var result :Int
for num in numArr {
	result += num
}
print(result) // 15

 

reduce메서드 사용

//초기값 0
let sum: Int = numArr.reduce(0, {(reuslt: Int, currentItem: Int) -> Int in
	return frist + second
})
print(sum) //15
//초기값 10
let sum2 = numArr.reduce(10) {$0 + $1}
print(sum2) //25

 

 

 


공부에 도움이 된 사이트들

 

 

전체적인 공부 가이드라인

yagom.net/courses/swift-basic/lessons/%ea%b3%a0%ec%b0%a8%ed%95%a8%ec%88%98/

 

스위프트 기초 - 야곰닷넷

스위프트는 문법표현의 다양성이 매우 높은 언어입니다. 그래서 스위프트 문법의 모든 형태를 알기는 꽤 오랜 시간이 걸립니다. 그렇지만 최소한의 핵심 문법을 통해 무리없이 스위프트 문법을

yagom.net

추가 참고

duwjdtn11.tistory.com/545

 

[iOS] 고차함수 in Swift

Higher-order Function in Swift 이번 시간에는 iOS 앱 개발을 위해 Swift 를 공부하면서, PS 언어로 Swift 를 사용하면서 익히 보고 들었던 고차함수에 대해 알아보려고 한다. What is Higher-order Function 자,..

duwjdtn11.tistory.com

 

 

 

 

 

 

 

 

 

 

 

반응형