[iOS] λ°°μ΄μ κ³ μ°¨ ν¨μ - Higher Order Fuctions

λ€μ΄κ°κΈ° μ μ
νλ‘μ νΈλ₯Ό νλ€λ³΄λ©΄ λ°°μ΄ κ·Έλλ‘λ₯Ό μ¬μ©νλ κ² μ΄μΈμλ λ°μ΄ν°λ₯Ό ꡬ쑰μ λ§κ² λ³νμμΌμ μ¬μ©νλ κ²½μ°κ° λ§μ΅λλ€. κ·Έλ΄λλ§λ€ μ°λ¦¬λ 쑰건문μ μ΄μ©ν΄ λΆκΈ°μ²λ¦¬λ₯Ό νκ±°λ μ½λλ₯Ό μ λ² κΈΈκ² μμ±ν΄μ λ°°μ΄μ μ²λ¦¬νκ³ λ νλλ°μ. μ μμλ κ·Έλ° κ²½μ°κ° λ§μμ΅λλ€.
μ΄λ²μ 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