LazySequence/LazyCollection 지연평가

Swift 4

0

 map에 의해 발생되는 불필요한 처리

[Int]인 배열요소에 1을 더하고 2를 곱하는 첫번째 요소를 가져오는 것을 만든다고 생각해보자.

결과는

위와 같이 나오고 r은 2가 대입된다. 처음 map에서 모든 요소에 1을 더하고 계속 ma과의 모든 요소에 2를 추가하여 그 첫번째 요소를 제거한다.

필요한 값은 let r = (0 + 1) * 2 만 계산 가능하지만, 무의미한 계산이 여러번 이루어진다. 이를 해결하기 위해 LazySequence/LazyCollection이 이용된다.

지연평가

lazy만 추가했을 뿐인데 아래와 결과가 출력된다.

r에는 2가 대입된다.

첫번째 요소

만 계산되는 것을 알 수 있다.

즉, map 전달 함수 실행은 그자리에서 되지 않고, 실제 값이 필요한 경우와 필요한 요소에서만 first가 호출되어 첫번째 요소만 실행되고 있는 것이다. 이와 같이 실제 값이 필요할 때, map등에 주어진 함수 실행을 지연시키는 것을 지연평가라고 하며 이를 담당하는 것인 LazySequence, LazyCollection이라고 한다.

그렇다면 이것들이 무엇을 했을 때 어떤 것이 발생하는지를 이해해야 한다.

실행안됨

 

해당 부분만 실행

조건 충족될 때까지

실행

 

Facebook Comments

No more articles