iOS/Swift

고차함수 (Map, Filter, Reduce)

밤새는 탐험가89 2024. 5. 26. 03:45

🟥 고차함수란?

다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 말한다. 

 

 

🟥 Map

기존 데이터를 변형하여, 새로운 컨테이너를 만든다.

단, 이 때 기존 데이터는 변형되지 않는다. 

 

✅ for - in 구문과 기능상 차이는 없지만, 다음과 같은 이점이 있다. 

  • 코드의 간결성
  • 재사용 용이
  • 컴파일러 최적화 성능 향상

✅ for - in

let numArray = [1,3,5,7,9]
var multiArray = [Int]()
for num in numArray {
    multiArray.append(num * 2)
}
print(multiArray)
// [2, 6, 10, 14, 18]

✅ map

let numArray = [1,3,5,7,9]

let multiArray = numArray.map { $0 * 2 }

print(multiArray)

// [2, 6, 10, 14, 18]

 

✔ 위의 코드는 후행 클로저 적용

✔ 아래 코드는 후행 클로저 미적용

let numArray = [1,3,5,7,9]

let multiArray = numArray.map({ (number: Int) -> Int in
    return number * 2
})

print(multiArray)

// [2, 6, 10, 14, 18]

 

 

🟥 Filter

데이터를 추출하고자 할 때 사용한다.

기존 컨테이너에서 내부의 값을 조건에 따라 걸러 새로운 컨테이너를 만든다.

 

✅ for - in

let stringAttay = ["가수", "대통령", "개발자", "선생님", "의사", "검사", "건물주"]
var threeCountArray = [String]()
for st in stringAttay {
    if st.count == 3 {
        threeCountArray.append(st)
    }
}
print(threeCountArray)
// ["대통령", "개발자", "선생님", "건물주"]

✅ filter

let stringAttay = ["가수", "대통령", "개발자", "선생님", "의사", "검사", "건물주"]
let threeCountArray = stringAttay.filter { $0.count == 3 }
print(threeCountArray)
// ["대통령", "개발자", "선생님", "건물주"]

 

✔ 위의 코드는 후행 클로저 적용

✔ 아래 코드는 후행 클로저 미적용

let stringAttay = ["가수", "대통령", "개발자", "선생님", "의사", "검사", "건물주"]
let threeCountArray = stringAttay.filter({ (value: String) -> Bool in
    return value.count == 3
})
print(threeCountArray)
// ["대통령", "개발자", "선생님", "건물주"]

 

 

🟥 Reduce

데이터를 합치기 위해 사용한다. 

기존 컨테이너에서 내부의 값들을 결합하여 새로운 값을 만든다.

 

✅ for - in

let numberArray = [1,2,3,4,5,6,7,8,9,10]
var sum = 0
for number in numberArray {
    sum += number
}
print(sum)
// 55

✅ reduce

let numberArray = [1,2,3,4,5,6,7,8,9,10]
let sum = numberArray.reduce(0) { $0 + $1 }
print(sum)
// 55

 

✔ 위의 코드는 후행 클로저 적용

✔ 아래 코드는 후행 클로저 미적용

 

let numberArray = [1,2,3,4,5,6,7,8,9,10]
let sum = numberArray.reduce(0, { (first: Int, second: Int) -> Int in
    return first + second
})
print(sum)
// 55

'iOS > Swift' 카테고리의 다른 글

MVVM 패턴 - Binding 개념  (0) 2024.05.30
MVVM 패턴 (Model - View - ViewModel)  (0) 2024.05.30
MVC 패턴 (Model - View - Controller)  (0) 2024.05.25
확장 (Extension)  (0) 2024.05.24
클로저 6편  (1) 2024.02.17