본문 바로가기

JavaScript

eager evaluation과 lazy evaluation

프로그래밍 언어에서 '표현식'이라는 용어는 리터럴, 연산자, 변수,함수 호출등이 복합적으로 구성된 코드를 말합니다.

예를 들어, 1 + 2는 1과 2라는 리터럴과 덧셈연산자 + 로 구성된 표현식입니다. 표현식은 항상 컴파일러에 의해 계산법(evalutaion)이 적용되어 어떤 값이 됩니다. 1 + 2 표현식은 컴파일러에 의해 3이라는 값이 됩니다.

 

이와 같이 컴파일러는 표현식을 마주치면 계산법(evalutaion)을 적용해서 어떤 값(value)를 만듭니다. 계산법에는 조급한 계산법 (eager evaluation) 과 느긋한(또는 지연) (lazy evalutaion) 두가지가 있습니다. 1 + 2 예제의 경우는 eager evaluation을 적용한 것입니다.

컴파일러가 함수를 표현식을 마주친다고 해봅시다.

 

let f = function (a,b) {return a+b}

 

이때 컴파일러는 심벌 a,b가 어떤 값인지 알 수 없기 때문에, lazy evalution을 적용합니다.

위 예제에서 f라는 변수가 함수 표현식을 담고 있으므로, 변수 이름뒤에 함수 호출 연산자를 붙여서 호출 할 수 있습니다.

f(1, 2) 이렇게 말이죠.

 

컴파일러는 함수 호출문을 만나면 지금까지 미뤘던 함수 표현식에 eager evalution을 적용합니다.

함수 표현식에 eager evalutaion을 적용한다는 의미는 함수 몸통 부분을 실행한다는 의미입니다.

 

 

 

아래는 위키피디아의 지연평가에 대한 정의 입니다.

 

지연평가
컴퓨터 프로그래밍에서 Lazy evalutaion은 계산의 결과 값이 필요할 때까지 계산을 늦추는 기법이다.

 

'JavaScript' 카테고리의 다른 글

[Core JavaScript] class  (0) 2022.03.04
[Modern JavaScript Deep Dive] Array  (0) 2022.03.03
[Modern JavaScript Deep Dive] Iterable  (0) 2022.03.02
[JavaScript] CustomEvent  (0) 2022.03.01
defer & async in script tag  (0) 2022.03.01