좀 어렵기도 하고 모바일이라 쓰기도 힘드니 간단요약하면
우선 엄격성
대부분의 함수들은 엄격해서 입력값에 대해 평가를 한대
무슨 뜻이냐면
int foo(1.0 + 2.0) 을 해주면 우리 함수는 foo를 실행하기 전에
1.0 + 2.0을 평가해서 3.0이랴 평가된 값을 사용한단거야
나태성이란 무엇이냐면
isTrue() && print("True") 처럼 부울연산이 대표적이야
첫번째를 평가 한 후 두번째의 평가를 시작한다는 뜻이지
이게 어떻게 사용되냐면
[1, 2, 3, 4]
.map(x+2)
.filter(x%2==0)
.map(x+10)
.toList()
가 있다고 해볼게 ㅇㅅㅇ
우선 엄격성!
[1, 2, 3, 4] 에서 매서드들이 만약에 엄격하다면
map은 [1,2,3,4]를 한번에 입력받아서 [3,4,5,6]를 생성할거고
그걸 filter에게 입력값으로 건내준 뒤 [3,4,5,6]은 폐기가 될거야
filter는 마찬가지로 [4,6]을
마지막 map은 [40, 60]을 주는거지
그럼 나태성을 보자
[1,2,3,4] 를 한번에 평가하지 않고 1부터 평가를 시작해
1은 map을 거쳐 3이되고 filter에게 넘어가서 걸러지지
그다음에야 2를 평가해서 4가 되고, 안걸러지고, 40으로 변환이 돼
결론은
이러한 특성은 어떤것이 좋다 나쁘다를 따질 순 없지만
메모리 효율면에서나 시간면에서 차이를 보이기 때문에
어떤 차이가 있는지정돈 알아두면 좋은거같아
영어로 뭐야? 나태성이라 그러니까 트로트가수같다 - dc App
Lazy Evaluation
Eager Evaluation