Javascript - 지연평가(Lazy Evaluation)

치맨·2025년 5월 11일
0

javascript

목록 보기
25/25
post-thumbnail

목차

지연 평가란
지연 평가 동작원리
참고


지연 평가란

  • 지연 평가(Lazy Evaluation)란 말 그대로 필요할 때까지 값을 계산하지(지연) 않는 전략입니다. 즉 사용되기 전까지 평가하지 않고, 값을 미루는 방법입니다.

  • 지연 평가는 원하는 시점까지 값의 평가를 지연시켜 메모리 사용량을 줄이고, 불필요한 연산을 방지함으로써 성능을 향상시킬 수 있습니다.

지연 평가 동작원리

  • 지연 평가의 동작원리는 일반 배열 자료구조를 이터레이터로 바꿔서 하나씩 값을 평가하는 방식입니다.

엄격 평가 동작원리

  • 지연 평가의 동작원리 전, 비교가 되는(일반적으로 사용되는) 엄격 평가의 동작원리를 살펴보겠습니다.

    • 예를들어 모두 1씩 더한 뒤, 홀수인 값들 중, 앞에서 3개를 추출하는 조건의 경우

      1. 100개의 요소가 존재하는 배열이 존재합니다.
      2. map을 통해 모두 +1을 해줍니다.
      3. filter를 통해 홀수를 필터링 한다.
      4. slice를 통해 앞에서 3개를 추출한다.
    • 위의 경우 총 203번 순회 과정이 진행됩니다.

      1. map 배열에서 100번
      2. filter 배열에서 100번
      3. slice에서 3번
  • 만약 100개가 아닌 1억개였다면 3개를 추출하기 위해 약 2억번의 과정이 필요합니다.

지연 평가 동작 원리

  • 지연평가의 경우 어떻게 동작하는지 알아보겠습니다.

  • 지연 평가의 경우 1개씩 처리하는 과정으로 진행됩니다.

  • 예를들어 [0,1,2,...99] 가 존재할 경우

    1. 0에 +1을 해주는 과정 1번
    2. 홀수인지 확인하는 과정 1번
    3. 홀수면 추출 하는 과정 1번, 짝수면 0번
  • 위 과정을 통해 앞에서 3개 추출을 위해서는 0요소에 관해 3번(홀수이므로), 1요소에 관해 (2번), 2요소에 관해 3번(홀수이므로), ... 이런식으로 진행됩니다.

  • 따라서 총 15번만 진행되고, 7이후 부터는 원하는 조건의 숫자 3개를 모두 추출했으므로, 불필요한 작업을 진행하지 않습니다.

실제 코드로 확인해보기

  • 1억개의 요소를 비교해보도록 하겠습니다.

  • 실제로 엄청난 속도 차이를 확인 할 수 있습니다.

  • 다만 지연평가를 실제로 어떻게 적용할지는 고민을 해봐야 될 것 같습니다. 대용량 데이터를 한 번에 처리할 필요 없이 데이터를 하나씩 처리할 경우가 생긴다면 적절하지 않을까 생각을 해봅니다.

참고

profile
기본기가 탄탄한 개발자가 되자!

0개의 댓글