Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ribs
- MVVM
- UITextView
- UICollectionView
- 클린 코드
- 리팩토링
- Clean Code
- rxswift
- collectionview
- map
- Observable
- Xcode
- HIG
- 리펙토링
- clean architecture
- swift documentation
- 리펙터링
- uitableview
- tableView
- uiscrollview
- combine
- 애니메이션
- Human interface guide
- ios
- SWIFT
- Protocol
- RxCocoa
- 스위프트
- Refactoring
- swiftUI
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] LazySequence 개념 (배열 데이터 다룰때의 최적화) 본문
LazySequence 개념
- 배열에서 특정 연산이 요청될 때까지 값을 계산하지 않고 지연시키는 데 사용
- map, filter, reduce에서 값을 구하고자할때 값을 계산하여 바로 가져오지 않고, 계산이 필요하다는것만 저장해놓는 상태 (=lazy 상태)
- ex) map은 호출 즉시 수행되어 변환된 배열이 반환되지만 LazySequence를 사용하면 해당 변환은 요청이 있을 때까지 실제로 수행되지 않음
ex11) LazySequence 간단 사용 케이스
func ex1() {
// LazySequence 사용 x
let numbers = [1, 2, 3, 4, 5]
let mappedValues = numbers.map { $0 * 2 }
// LazySequence를 사용 o
let lazyMappedValues = numbers.lazy.map { $0 * 2 }
print(lazyMappedValues) // LazyMapSequence<Array<Int>, Int>
/// 여기까지는 아직 어떠한 계산도 수행되지 않음
// 실제로 필요한 시점에서 계산
let result = Array(lazyMappedValues)
print(result) // [2, 4, 6, 8, 10]
}
ex2) 파이프라인으로 고차함수 사용
- lazy가 없다면 map, filter, forEach 각각 모두 배열의 원소를 계산할텐데, lazy를 붙임으로서 지연하여 실제로는 filter에 걸린 개수만큼만 연산될 것
func ex2() {
(1...100)
.lazy
.map { $0 * $0 }
.filter { $0 % 5 == 0 }
.forEach { print($0) }
}
* 참고
- https://developer.apple.com/documentation/swift/lazysequence
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] dictionary nil 초기화 시 주의사항 (2) | 2023.12.23 |
---|---|
[iOS - swift] UIPinchGestureRecognizer 개념 (줌 기능, zoom) (3) | 2023.12.22 |
[iOS - swift] 메모리 프로파일링 - 맛보기 (메모리 관점에서의 UIImage 관리, 이미지 처리) (16) | 2023.12.19 |
[iOS - swift] 5. VoiceOver 접근성 실전 - 접근성 계층관계 (3) | 2023.12.18 |
[iOS - swift] 9. Memory Deep Dive - 백그라운드에서 메모리 최적화하는 방법 (0) | 2023.12.16 |
Comments