일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- uikit
- error
- SWIFT
- 고차함수
- viewlifecycle
- calendar
- 글또
- Observer
- list
- self
- struct
- array
- escaping
- Refresh
- singleton
- class
- apns
- SWIFTUI
- segue
- IOS
- http
- mvvm
- PushNotification
- 회고
- 화면전환
- Git
- ScrollView
- protocol
- Switch
- NotificationCenter
- Today
- Total
seong_hye, the developer
Swift) 고차함수가 메모리 측면에서 이득인가? 본문
고차함수에 대해 공부하고 사용하다가 보니
for문을 사용해도 되는 걸 고차함수로 사용하는 게 이득인가? 라는 생각을 하게 되었다.
https://programming-seonghye.tistory.com/25
Swift)문법 정리 - 고차함수
📘 Swift 문법 정리: 고차함수Swift 문법 중 고차함수에 대해 정리한 글입니다. 🔹 1. 문법 설명Swift에서 매우 핵심적인 개념으로 컬렉션 처리 (Array, Set, Dictionary) 에 자주 사용됩니다.다른 함수를
programming-seonghye.tistory.com
그런 이유로 한 번 알아보자.
📘 고차함수 사용이 메모리 측면에서 이득인가?
🔹 결론 먼저 요약
Swift에서 고차함수(map, filter, reduce 등)는 가독성과 표현력은 뛰어나지만,
메모리 사용이나 성능 면에서는 항상 더 유리하다고 볼 수는 없다.
🔍 메모리 측면에서의 장단점
✅ 장점
1. 코드가 간결해져서 유지보수가 쉬움
- 클로저와 고차함수를 쓰면 코드 길이가 짧아지고 오류 가능성이 줄어듭니다.
~> 개발자 생산성에는 이득이 있어요
2. 지연 평가를 통해 메모리 절약 가능 (조건부)
- lazy 키워드를 사용하면 실제로 값을 즉시 계산하지 않고, 필요할 때 계산해 메모리 사용이 줄어들 수 있습니다.
let result = numbers.lazy.filter{...}.map{...}
✅ 단점
1. 중간 배열이 계속 생성됨( 기본 map/filter 등 사용 시)
ex) array.map{...}.filter{...} 처럼 체이닝할 경우, 각각의 연산에 중간 배열이 메모리에 생성됨
2. 클로저 캡처 비용
- 클로저 내부에서 외부 변수를 캡처하는 경우, 해당 변수는 클로저가 살아 있는 동안 메모리에 유지됨
3. 디버깅이 어려울 수 있음
- 가독성은 좋지만, 내부 동작 추적이나 성능 튜닝 시엔 for문보다 복잡할 수 있음
🔹 성능 비교 예시
let numbers = Array(1...10_000)
let reulst1 = numbers.map{ $0 * 2 }.filter{ $0 % 3 == 0 }
let reulst2: [Int] = []
for number in numbers {
let doubled = number * 2
if doubled % 3 == 0 {
result2.append(doubled)
}
}
📌 설명
- result1 : 고차함수 (map -> filter) ~> 중간 배열 2개 생성
- result2: for문 ~> 중간 배열 없이 직접 결과 리스트에 추가
➡️ 대량 데이터에서는 for문이 더 메모리 효율적일 수 있음
🔹 최적화 포인트: lazy 사용
let result = numbers.lazy,map{$0 *2}.filter{$0 % 3 == 0}
📌 설명
lazy를 사용해 연산이 필요할 때만 수행됨
중간 배열 생성을 방지해 메모리 사용이 감소함
🔹 정리 요약
항목 | 고차함수 | for문 |
가독성 | 뛰어남 | 낮음 |
디버깅 편의성 | 복잡 | 명확 |
성능 | 중간 배열 많은 경우 불리 | 메모리 효율적 |
최적화 | lazy 사용 시 개선 가능 | 직접 제어 가능 |
🔹 결론
- 작고 간단한 연산 -> 고차함수 추천 (가독성과 생산성이 높음)
- 대용량 데이터 처리, 고성능 요구 -> for문 or lazy 고차함수 고려
'IOS > SwiftUI' 카테고리의 다른 글
SwiftUI) 버튼 활용해 화면 맨 위로 올라오기 (0) | 2022.10.18 |
---|---|
SwiftUI) Picker & DatePicker 사용하기 (0) | 2022.08.31 |
SwiftUI) 하단 Refresh 추가하기 (0) | 2022.08.24 |
SwiftUI) LazyVGrid & LazyHGrid 알아보기 (0) | 2022.08.23 |
SwiftUI) 화면 전환 방식 (0) | 2022.07.19 |