일급 객체(First-class citizen)과 고차 함수(Higher-order function)

예제 source code 링크

First-class Citizen(일급 객체)

First-class 는 값으로 취급 될 수 있는 모든 요소를 나타냅니다. 변수는 할당하거나 함수의 파라미터로 전달될 수 있는데 이러한 경우가 값으로 취급 될 수 있음을 말합니다. 즉, 변수는 First-class의 Citizen으로 간주되는 것입니다. 또 다른 First-class citizen의 예로는 정수, 문자열, 배열, 객체 등이 있습니다.

First-class Function(일급 함수)

First-class Function은 프로그래밍 언어중에서 함수를 First-class Citizen으로 취급하는 것을 말합니다. 즉, 함수를 변수에 할당하거나 파라미터로 전달하는 등을 할 수 있는 언어를 말합니다.

이러한 언어로는 python과 javascript 등이 있습니다.

python first-class function 관련 글 링크

First-class 예제

이 예제들은 First-class Function의 예제이면서 동시에 First-class Citizen의 예제입니다.

변수에 함수 할당

const add = function (a, b) {
  return a + b;
};

함수를 다른 함수의 인수로 전달

function sayHi(name) {
  console.log(`hi, ${name}`);
};

function greet(greeting, name) {
  greeting(name);
};

greet(sayHi, 'lee');      // hi, lee

다른 함수에서 함수 반환

function createMultiplier(multiplier) {
  return function (number) {
    return number * multiplier;
  };
};

const double = createMultiplier(2);

console.log(double(4));   // 8

Higher-order Function(고차 함수)

Higher-order Fuction은 하나 이상의 함수를 인수로 받거나 함수를 결과로 반환하는 함수입니다. 즉, 다른 함수에서 작용하는 함수입니다.

Higher-order Function 예제

map() function

const numbers = [1, 2, 3, 4, 5];

const squaredNumbers = numbers.map(function(number) {
  return number * number;
});

console.log(squaredNumbers);    // [ 1, 4, 9, 16, 25 ]

filter() function

const words = ['hello', 'world', 'javascript', 'programming'];

const shortWords = words.filter(function (word) {
  return word.length < 6;
});

console.log(shortWords);    // [ 'hello', 'world' ]

reduce() function

const numArray = [1, 2, 3, 4, 5];

const sum = numbers.reduce(function (acc, number){
  return acc + number;
}, 0);

console.log(sum);   // 15

일급 함수와 고차 함수의 차이점

이러한 점에서 일급 함수와 고차 함수의 차이점은 일급 함수는 값으로 취급할 수 있는 함수이고, 고차 함수는 다른 함수에 대해 연산을 할 수 있는 함수라는 점입니다. 다시 말하면 일급 함수는 프로그래밍 언어에서 값으로 취급할 수 있는 함수의 일종이고, 고차 함수는 다른 함수를 인자로 받거나, 인자로 돌려줌으로써 다른 함수에 작용하는 함수의 일종입니다. 즉, 모든 고차 함수는 일급 함수이지만, 모든 일급 함수가 고차 함수는 아닙니다.

function applyOperation(operation, a, b) {
  return operation(a, b);
}

const result = applyOperation(function (a, b) {
  return a + b;
}, 2, 3);

console.log(result);    // 5

즉 위의 예제는 고차 함수이면서 일급 함수인 예제입니다.

'JavaScript > JavaScript' 카테고리의 다른 글

호이스팅(Hoisting)  (0) 2023.09.27
sort 메소드  (0) 2023.09.06
Named Function Expression(기명 함수 표현식)  (0) 2023.04.11
BigInt  (0) 2023.04.09
Primitive Type, Null과 undefined  (0) 2022.12.13