๋ค์ด๊ฐ๊ธฐ ์ ์
ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด ๋ฐฐ์ด ๊ทธ๋๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ด์ธ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ณํ์์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ด๋๋ง๋ค ์ฐ๋ฆฌ๋ ์กฐ๊ฑด๋ฌธ์ ์ด์ฉํด ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํ๊ฑฐ๋ ์ฝ๋๋ฅผ ์ ๋ฒ ๊ธธ๊ฒ ์์ฑํด์ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๊ณ ๋ ํ๋๋ฐ์. ์ ์ญ์๋ ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค.
์ด๋ฒ์ SOPT๋ผ๋ IT ๋ฒค์ฒ ์ฐฝ์ ๋์๋ฆฌ์์ APPJAM ์ด๋ผ๋ 3์ฃผ๊ฐ์ ํฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ค์ํ๊ฒ ๋๋ ๊ฒ ์ค ํ๋๋ ๋ฐฐ์ด์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํ๋ ๊ฒ์ด์์ต๋๋ค.
์๋์์ ์๊ฐํ๋ ๋ด์ฉ์์๋ ์ ๋ง ์ผ๋ถ๋ถ๋ง ๋ค๋ฃฌ ๊ฒ์ธ๋ฐ์. ์ด ์ญ์ Apple Develeoper ๊ณต์ ๋ฌธ์์ ์ ๋ง ์์ธํ๊ฒ ์ ๋์์์ต๋๋ค. (์ง์ง ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋๋ผ๋ ๊ฒ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ ์ฝ์ ์ธ ๊ฒ ๊ฐ๋ค์..ใ ใ )
๋ญ ์ฌํผ! ์ค๋์ ๋ฐฐ์ด์์ ์ฌ์ฉ๋๋ ๊ณ ์ฐจ ํจ์ 5๊ฐ์ง๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐฐ์ด์ ๊ณ ์ฐจ ํจ์ (Higher Order Fuction)
์ด๋ฒ์๋ Array์ ๊ณ ์ฐจํจ์์ ๋ํ ํ์ต์ ์งํํ์์ต๋๋ค.
map, reduce, filter, flatMap, compactMap
// MARK: - Custom Functions
extension ViewController {
// Mark: - Map
// - ํน์ ํํ๋ก ๋ณํํด์ ์์๋ฅผ ๋ฐํ
private func executeMap() {
let doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers)
}
// Mark: - Reduce
// - ์ด๊ธฐ์์๋ฅผ ์ง์ ํด์ฃผ๊ณ , ๋๋จธ์ง ์์๋ฅผ ํฉ์ณ์ ๋ฐํ
private func executeReduce() {
let sum = numbers.reduce(0) { $0 + $1 }
print(sum)
}
// Mark: - Filter
// - ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๊ณ True์ธ ์์ ๋ฐํ
private func executeFilter() {
let even = numbers.filter { $0 % 2 == 0 }
print(even)
}
// Mark: - CompactMap
// - ๋ฐฐ์ด์ nil ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ์ ์ธํ๊ณ ์์ ๋ฐํ
private func executeCompactMap() {
let compactMapArray = arrayWithNil.compactMap { $0 }
print(compactMapArray)
}
// Mark: - FlatMap
// - 2์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ
// - nil๊ฐ ์ ๊ฑฐ ์ํด์๋ compactMap ์ฌ์ฉ
// - flatMap, CompactMap์ 1์ฐจ์๋ฐฐ์ด์ผ๋๋ง nil๊ฐ ์ ๊ฑฐ
private func executeFlatMap() {
let flatMapArray = twoDimensionalArrayWithNil
.flatMap { $0 }
.compactMap { $0 }
print(flatMapArray)
}
}
Map
- ํน์ ํํ๋ก ๋ณํํด์ ์์๋ฅผ ๋ฐํ
Reduce
- ์ด๊ธฐ์์๋ฅผ ์ง์ ํด์ฃผ๊ณ , ๋๋จธ์ง ์์๋ฅผ ํฉ์ณ์ ๋ฐํ
Filter
- ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๊ณ True์ธ ์์ ๋ฐํ
CompactMap
- ๋ฐฐ์ด์ nil ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ์ ์ธํ๊ณ ์์ ๋ฐํ
FlatMap
- 2์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ
- nil๊ฐ ์ ๊ฑฐ ์ํด์๋ compactMap ์ฌ์ฉ
- flatMap, CompactMap์ 1์ฐจ์๋ฐฐ์ด์ผ๋๋ง nil๊ฐ ์ ๊ฑฐ
๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ฝ๋๋ฅผ ์ ์์ฑํ๋(?!) ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ทธ ๊ธฐ์ค์ ๋ชจํธํ์ง๋ง
๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์๊ฐ ์์ด์...
๋จ์ํ ์๊ณ ์๋ ๊ฒ๊ณผ ์ฌ์ฉ์ ํ๋ ๊ฒ์ ํฐ ์ฐจ์ด๊ฐ ์์ฃ !!
์ฐ๋ฆฌ๋ ์ด์ ์์์ผ๋ ๊ธฐ์กด์ ์์ฑํ ์ฝ๋๋ฅผ ์ ๋ฐ๊ฟ ์ ์๋์ง ์๊ฐํด๋ณด๋๋ก ํฉ์๋ค ๐
๋ ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค~!
๊นํ๋ธ
์๋ ๋งํฌ๋ ๊ฐ๋จํ๊ฒ ํ ์คํธํด๋ณธ ํ๋ก์ ํธ์ ๋๋ค.
์ฝ๋ ์ฐธ๊ณ ํ์๋ ค๋ฉด ์๋ ๋งํฌ๋ก ๊ฐ์ฃผ์ธ์!
https://github.com/Taehyeon-Kim/iOS-Wiki/tree/master/HigherOrderFunction
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
iOS Issue(1) - Build input file cannot be found (0) | 2021.07.30 |
---|---|
[iOS] ๋๋ ๋ชจ๋ฅด๊ฒ ์ฌ์ฉํ๊ณ ์์๋ Generic (0) | 2021.07.29 |
[iOS] CollectionView์ PageControl๋ก Pager ๊ตฌํํ๊ธฐ (9) | 2021.07.26 |
[Alamofire Mapper] URLRequestConvertible ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2021.07.23 |
[iOS] UIKit์์ Preview ์ฌ์ฉํ๊ธฐ (3) | 2021.05.27 |