ARCHIVES

인수(argument)의 평가와 값

(주)비트나인 2016. 3. 5. 03:36



함수에 넘기는 어떤 값을 인수(argument)라고 하지요. 오늘은 인수로 어떤 종류의 값이 넘어가는지, 그리고 인수를 언제 평가(evaluation)하는지 살펴보도록 하겠습니다.




빠른 평가와 지연 평가


수식(expression)의 평가는 시점에 따라 빠른 평가(eager evaluation)와 지연 평가(lazy evaluation)로 나뉩니다. 빠른 평가는 인수 수식을 함수에 넘기기 전에 평가합니다. 반면, 지연 평가는 인수를 함수 안에서 실제로 사용할 때 비로소 해당 수식을 평가합니다.




평가 방법


여기서는 참고의 링크에 나온 몇 가지 평가 방법을 소개하겠습니다.


Call-by-value (빠른 평가)

값을 복사해서 전달 (C에서 pointer를 전달하는 것도 call-by-value)


Call-by-reference (빠른 평가)

값에 대한 참조를 전달 (해당 값이 저장된 메모리)


Call-by-sharing (빠른 평가)

Object로 boxing 값을 call-by-value로 전달 (Java의 Integer를 method에 전달하는 것과 유사)

Object를 통해 값을 변경할 수 있으나, 호출 측에서 변수로 해당 object를 넘긴 경우, 해당 변수의 값을 변경할 수는 없음


Call-by-name (지연 평가)

함수를 호출하기 전에는 인수를 평가하지 않음

함수 안에서 인수를 사용하지 않으면 해당 인수를 평가하지 않음

인수를 사용할 때마다 새로 평가함


Call-by-need (지연 평가)

Call-by-name과 비슷하지만 한번 평가한 인수의 평가 결과를 기억하고 있음

(인수가 외부의 영향을 받지 않는다면 call-by-name과 차이가 없지만 속도 면에서 이득을 봄)




마치며


위에서 볼 수 있듯, 다양한 인수 평가 방법이 있습니다. 이러한 평가 방법은 언어마다 다릅니다. 본인이 사용하는 언어가 어떤 평가 방법을 지원하는지 알고 잘 활용한다면, 좀 더 나은 프로그램을 만들 수 있을 겁니다.




참고


Evaluation Strategy - Wikipedia






Posted by Bitnine(비트나인)