Introduction
프로그래밍 관련 문서를 원어로 읽어보면 evaluate라는 단어가 등장한다. 일반적으로 evaluate는 평가하다라는 의미를 가지고 있지만, evaluate를 단순히 '평가하다'라는 의미로 번역하는 것은 직관적이지 않다.
다음 문장을 보자.
오토클로저는 평가를 지연할 수 있게 해준다, 왜냐면 (오토클로저의) 내부에 있는 코드는 클로저를 호출할 때 까지 실행되지 않기 때문이다. 평가를 지연시키는 것은 코드가 사이드 이펙트를 가지고 있거나, 계산하는데 많은 비용이 드는 경우에 코드가 평가되는 시점을 컨트롤할 수 있기 때문에 유용하다. 아래의 코드는 어떻게 클로저가 평가를 지연시키는지를 보여준다.
문맥상 이 문장에서의 평가가 코드 컨벤션 준수 여부나 코딩 스타일을 대상으로 하는 것 아니라는 것은 자연스럽게 알게 된다. 따라서 어떤 것을 평가하는지 혼란을 겪게 된다.
Evaluate an Expression
다음과 같은 예시를 C++로 하나 작성하겠다.
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main(void) {
int a = 1, b = 2;
std::cout << a + b << std::endl;
std::cout << add(a, b) << std::endl;
return 0;
}
// 3
// 3
// Program ended with exit code: 0
당연하게도 위 코드의 main(void)
에 있는 a + b
와 add(a, b)
는 둘 다 출력하면 3이 출력된다. 두 라인의 가장 큰 차이점은 전자는 Expression(표현식)이고, 후자는 Function(함수) 호출이다.
Function은 호출하면 실행되어 결과를 리턴한다(이 부분은 아래 문단에서 짧게 설명하겠다). 하지만 Expression은 이러한 과정을 evaluate이라고 한다. 위 코드에서 첫 번째로 출력된 3은 Expression a + b를 evaluate한 결과이다. Expression은 Function과 다르게 따로 실행을 통제할 수 있는 존재가 아니므로 evaluate라고 한다.
Function은 당연히 Expression의 집합이기 때문에 (애초에 Function이 Expression을 재사용하기 위해 만드는 것 이니까) Function을 호출하고, 실행하면 그 자체도 evaluate 되었다고 할 수 있겠다.
Look up in a Dictionary
그렇다면 Expression을 계산하는 것에 왜 evaluate를 쓰는지 생각해보자.
사전에서는 이렇게 직접적으로 의미가 나온 경우도 있지만 "평가하다"의 경우를 생각해보자.
The cheeses are evaluated for flavour, texture and colour.
치즈들은 맛, 질감 그리고 색으로 평가된다.
치즈들은 맛, 질감, 색이라는 특징으로 좋은 치즈인지, 혹은 그저 그런 치즈인지 결과가 나올 것이다. 이 과정이 치즈를 evaluate하는 과정이다. 마찬가지로 표현식도 적혀져있는 변수, 상수, 리터럴, 함수, 오퍼레이터들로 인해 표현식에 대한 결과가 나온다. 당연히 이 과정은 표현식을 evaluate한 것이다.
'Swift > Kelly Lab' 카테고리의 다른 글
[Swift] 배열, 딕셔너리 접근 속도 비교 (0) | 2023.05.18 |
---|---|
C, C++, JAVA, Python, Swift 단순 반복문 실행시간 비교 (0) | 2022.05.09 |
댓글