Skip to content

일급 객체와 고차 함수

평가 (Evaluation)

코드가 계산되어 값을 만드는 과정

🧩 Evaluation

평가(Evaluation)는 프로그래밍에서 표현식이 실제로 실행되어 값(value)으로 바뀌는 전 과정을 포괄하는 용어이다. 단순히 수를 더하는 ‘계산(calculation)’보다 더 넓은 개념이기 때문에, 개발자들은 ‘평가’라는 표현을 쓴다.

구분계산 (Calculation)평가 (Evaluation)
의미수학적인 연산을 수행해
숫자 결과를 얻는 것
표현식(expression)이 실행되어 값(value)으로 바뀌는 과정 전체
예시2 + 3 = 5x + 3 → x가 2일 때 → 2 + 35
범위숫자 연산 중심변수 참조, 함수 호출, 조건문 분기 등도 포함

즉, 평가는 단순한 수학 연산을 넘어, 코드의 표현식을 실제로 실행해 최종 값을 만들어내는 과정 전체를 의미한다.

js
const x = 10;
const y = x * 2 + 1;
  • x * 2 + 1;이라는 표현식이 평가되어 21이라는 값을 만들어 낸다.
    이 전체 과정을 Evaluation이라고 부른다.

함수형 프로그래밍에서 Evaluation이 중요한 이유

함수형 프로그래밍에서는 "언제", "어떻게" 평가할지가 핵심 주제다.
대표적인 평가 전략으로는 다음과 같은 방식이 있다:

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

이러한 전략들은 평가 시점을 다루며, 함수형 프로그래밍의 동작 방식과 성능에 큰 영향을 준다.

일급 (First-Class Object)

js
const a = 10;

// 함수도 값처럼 변수에 할당할 수 있다.
const add10 = (a) => a + 10;

// 함수는 다른 함수에 인자로 전달할 수 있고
add10(a);

// 함수의 실행 결과도 값이 되어 변수에 담을 수 있다.
const r = add10(a);
console.log(r); // 20
  • 값으로 다룰 수 있다.
  • 변수에 담을 수 있다.
  • 함수의 인자로 사용될 수 있다.
  • 함수의 결과로 사용될 수 있다.

이런 특징 때문에 자바스크립트에서 함수를 고차 함수의 인자나 반환값으로 자유롭게 사용할 수 있다.


일급 함수 (First-Class Function)

자바스크립트에서 함수는 일급 객체다.
즉, 숫자나 문자열처럼 함수를 으로 다룰 수 있으며, 이를 통해 조합성추상화의 도구로 활용할 수 있다.

일급 함수의 특징

1. 값으로 다룰 수 있다.

함수 자체를 값처럼 다루어 출력할 수 있다.

js
const add10 = (a) => a + 10;
console.log(add10); // (a) => a + 10

2. 변수에 담을 수 있다.

함수를 변수에 저장해 필요할 때 호출할 수 있다.

js
const add10 = (a) => a + 10;
console.log(add10(10)); // 20

3. 함수의 인자로 사용할 수 있다.

함수를 다른 함수의 인자로 전달할 수 있다.
run은 전달받은 함수 f값 v에 적용하여 실행하는 고차 함수이다.

js
const add10 = (a) => a + 10;
const run = (f, v) => f(v);

console.log(run(add10, 5)); // 15

4. 함수의 결과로 사용할 수 있다

함수를 반환하고, 반환된 함수를 나중에 실행할 수 있다.

js
const makeFunc = () => () => 1;

const f1 = makeFunc();
console.log(f1); // () => 1
console.log(f1()); // 1

요약

  • 함수는 값처럼 변수에 저장, 인자로 전달, 결과로 반환될 수 있다.
  • 이러한 성질 덕분에 조합성과 추상화가 가능해진다.
  • 함수형 프로그래밍은 바로 이 일급 함수 특성을 기반으로 한다.