본문 바로가기
개발일지/JavaScript ES6

L객체와 C객체, 지연평가(Lazy Evaluation)와 즉시평가(Eager Evaluation)

by 꾸주니=^= 2024. 11. 30.

L객체와 C객체

지연평가(Lazy Evaluation), 즉시평가(Eager Evaluation)

 


1.  L객체과 C객체

  • L 객체:
    • L은 Lazy (지연 평가)를 지원하는 함수 모음
    • 여기서 제공되는 함수(deepFlat, deepFlatten, entries, 등)는 데이터를 처리할 때 메모리를 효율적으로 사용하며, 필요할 때만 값을 계산하는 방식으로 작동한다.
    • 지연 평가는 큰 데이터셋이나 무한 이터러블을 처리할 때 유용하다.
  • C 객체:
    • C는 병렬적 실행(Concurrency)을 지원하는 함수 모음
    • reduce, take, mapEntries 등의 함수가 포함되어 있으며, 데이터 처리를 병렬적으로 실행하여 속도를 향상시킬 수 있다.
    • 특히, 비동기 처리를 다룰 때 유용하다.

 


2. 지연평가(Lazy Evaluation), 즉시평가(Eager Evaluation)의 차이

 

1. 지연 평가(Lazy Evaluation)란?

지연 평가는 데이터를 처리할 때, 실제로 필요한 순간까지 계산을 미루는 방식이다. 이는 이터러블 프로그래밍의 중요한 개념이며, 메모리를 효율적으로 사용하고 계산 시간을 줄이는 데 유용하다.

특징:

  1. 데이터가 필요할 때만 계산이 발생.
  2. 불필요한 계산을 피함.
  3. 무한 이터러블도 처리 가능.
  • Lazy 상태: 지연 평가가 이루어진 상태에서는 아직 계산되지 않은 이터러블만 존재하며, 이터러블을 순회하거나 값을 소비하지 않으면 결과를 볼 수 없다.

 

 

2. 즉시 평가(Eager Evaluation)란?

즉시 평가는 데이터를 처리할 때, 모든 값을 한 번에 계산하고 메모리에 저장하는 방식이다. 이는 일반적인 배열 연산이나 명령형 프로그래밍에서 주로 사용된다.

  • 특징:
    1. 데이터가 즉시 계산되어 결과를 반환.
    2. 결과를 메모리에 저장하므로 큰 데이터셋에서는 비효율적.
    3. 무한 이터러블을 처리할 수 없음.
  • Eager 상태: 즉시 평가가 이루어진 상태에서는 계산된 값이 배열 형태로 저장되어 있다.

 

아래 코드는 아직 평가 되지 않은 lazy 상태(=지연 평가 상태) 이다.

[지연 평가 실행 과정]

  • L.filter:
    • list에서 홀수만 필터링합니다.
    • 하지만 아직 계산되지 않았습니다.
    • 결과는 Lazy Iterable 상태로 유지.
  • L.map:
    • filter를 통해 걸러진 홀수 값에 대해 제곱을 계산합니다.
    • 하지만 실제로 순회하거나 값을 소비하기 전까지 계산되지 않습니다.
    • 결과는 Lazy Iterable 상태로 유지.
  • L.take:
    • 위의 지연 평가된 결과에서 limit 개수만큼의 값을 가져옵니다.
    • 하지만 이 시점에서도 계산은 이루어지지 않고, 결과는 여전히 Lazy Iterable 상태입니다.

 

출력 결과 : Lazy Iterable 객체를 참조하는 형태로, 아직 계산되지 않았습니다.

 


평가를 즉시하게 되면, 아래 값처럼 나타남. 즉시 평가 상태

 


...은 뭘까?
... (스프레드 연산자):
  • 지연 평가된 이터러블 값을 순회하며 즉시 계산합니다.
  • L.take와 연결된 모든 계산(filter, map)이 실행되고, 최종 결과는 배열로 반환됩니다.

 

[즉시 평가 실행 과정]

  1. L.filter: 리스트에서 홀수를 필터링 → [1, 3, 5, 7, 9].
  2. L.map: 필터링된 홀수의 제곱 계산 → [1, 9, 25, 49, 81].
  3. L.take: 앞에서 계산된 결과 중 limit 개수만 가져옴 → [1, 9, 25].

출력 결과: 최종 계산된 배열 [1, 9, 25].

 


왜 지연 평가와 즉시 평가를 비교할까?

  1. 효율성:
    • 지연 평가를 사용하면, 데이터의 일부만 필요할 때 불필요한 계산을 피할 수 있습니다.
    • 예를 들어, 무한 이터러블처럼 끝이 없는 데이터도 처리 가능.
  2. 즉시 계산:
    • 때로는 계산된 결과가 필요하므로 즉시 평가를 사용해 최종 값을 명시적으로 얻어야 합니다.
    • 예: 화면에 출력하거나, 데이터를 저장해야 하는 경우.
  3. 메모리 절약:
    • 큰 데이터셋에서 지연 평가를 사용하면, 메모리를 덜 사용하고 필요한 만큼만 계산할 수 있습니다.

 

실제 차이점 요약:

  • 지연 평가: 필요할 때만 계산. 더 효율적이고 메모리를 적게 사용.
  • 즉시 평가: 결과를 한 번에 계산하고 배열로 반환. 사용이 간단하지만 메모리 사용량 증가.