관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] LazySequence 개념 (배열 데이터 다룰때의 최적화) 본문

iOS 응용 (swift)

[iOS - swift] LazySequence 개념 (배열 데이터 다룰때의 최적화)

jake-kim 2023. 12. 20. 23:31

LazySequence 개념

  • 배열에서 특정 연산이 요청될 때까지 값을 계산하지 않고 지연시키는 데 사용
  • map, filter, reduce에서 값을 구하고자할때 값을 계산하여 바로 가져오지 않고, 계산이 필요하다는것만 저장해놓는 상태 (=lazy 상태)
    • ex) map은 호출 즉시 수행되어 변환된 배열이 반환되지만 LazySequence를 사용하면 해당 변환은 요청이 있을 때까지 실제로 수행되지 않음

https://developer.apple.com/documentation/swift/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

Comments