javascript - 일급객체, 고차함수

  • SUNGMIN SHIN
  • 12 Minutes
  • 2018년 10월 1일

javascript - 일급객체, 고차함수

1급 객체?

1급 객체 (first-class citizens, 일급 값, 일급 엔티티, 혹은 일급 시민)의 개념은 영국의 컴퓨터 과학자 크리스토퍼 스트레이치에 의해 1960년에 처음 소개된 개념으로 컴퓨터 프로그래밍 언어 디자인에서, 특정 언어의 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.

1급 객체의 조건

  • 변수나 데이터 구조에 담을 수 있어야 한다.
  • 인자(파라미터)로 전달할 수 있어야 한다.
  • 반환값(리턴값)으로 전달할 수 있어야 한다.

위 조건을 기준으로 살펴보면 자바스크립트에서는 기본 자료형(Boolean, Null, Undefined, Number, String, Symbol, Object(Function, Array등은 여기에 포함)) 일급 객체가 될 것이다.


함수가 일급 객체의 조건에 해당되는지 살펴 보자.

함수를 변수나 데이터 구조에 할당

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var func1 = function() {
// ...
};
let func2 = function () {
// ...
};
const func3 = () => {
// ...
};

// 배열, 객체에 할당
let arr = [
1,
2,
function() {
// ...
}
];

let obj = {
func: function() {
// ...
}
};


함수를 인자(파라미터)로 전달

1
2
3
4
5
6
7
8
function greeting(message) {
alert(message);
}

// 인자(파라미터)로 함수 greeting을 전달
let hello = function(greeting) {
greeting('hello');
}


함수를 반환값(리턴값)으로 전달

1
2
3
4
5
6
7
8
9
function greeting(message) {
return function() {
alert(message);
}
};

let hello = greeting('hello');

hello();


고차함수

함수를 인자로 받거나 결과로 반환하는 함수를 고차함수라고 하며 이와 같은 조건에 부합되려면 일급객체여야 한다. (즉 고차함수는 함수를 인자값, 반환값으로 다룰 수 있는 함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const greeting = function(message) {
return function() {
alert(message);
}
};

const each = (arr, func) => {
return [...arr].map((item) => func(item));
};

let hello = greeting('hello');
hello();

each([1, 2, 3, 4, 5], function(item) {
console.log(item * 2);
});


내장함수(메서드) 중 고차함수의 예


[ 참고 ]
위키백과 - 일급객체
bestalign’s dev blog - JavaScript의 함수는 1급 객체(first class object)이다
김정환 블로그 - 고차 함수
JOEUN.ME - 고차-함수와-커링-currying
poiemaweb - Higher order function