1급 시민, 1급 객체, 1급 함수

July 30, 2021 · 2 mins read label-icon Javascript

1급 시민 (First class citizen)

  • 아래의 특정 조건을 충족하는 것
    • 변수에 담을 수 있다. (variable)
    • 함수의 인자로 전달할 수 있다. (parameter)
    • 반환값으로 전달할 수 있다. (return value)

1급 객체 (First class object)

  • 1급 시민의 조건을 충족하는 객체
  • 자바스크립트의 객체는 1급 객체이다.

고차함수 (Higher order function)

  • 함수를 인자로 받거나 반환값으로 사용할 수 있는 함수
  • 함수를 인자로 받아 사용하거나 클로저를 만들어 반환한다.

1급 함수 (First class function)

  • 1급 시민의 조건들과 추가 조건을 모두 충족하는 함수
    • 런타임 생성이 가능하다. (runtime)
    • 익명으로 생성이 가능하다. (anonymous)
  • 자바스크립트의 함수는 1급 함수이다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// variable
var increase = function (num) {
  return ++num;
};

// variable
var decrease = function (num) {
  return --num;
};

var predicates = { increase, decrease };

// makeCounter() => 고차함수
function makeCounter(predicate) { // parameter
  var num = 0;

  return function () { // anonymous
    num = predicate(num);
    return num; // return value
  };
}

var increaser = makeCounter(predicates.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2

var decreaser = makeCounter(predicates.decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2

참고

https://bestalign.github.io/dev/first-class-object/
https://poiemaweb.com/js-function#3-first-class-object-%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4
https://poiemaweb.com/js-array-higher-order-function