본문 바로가기
JavaScript/함수형 프로그래밍

일급 함수

by Vintz 2021. 9. 21.

함수형 프로그래밍과 일급 함수

함수형 프로그래밍의 이점들을 활용해 로직을 구현하고, 컨셉을 이해하기 위해 일급 함수에 대해 먼저 알아보자.

  • 자바스크립트에서 함수는 일급 함수이다.
    • 다시 말해 함수를 값으로 다룰 수 있다는 뜻이다.

함수를 변수에 담기

// ✅ 일급 함수는 변수에 함수를 담을 수 있다.
const foo = function (a) {
  return a * a;
};

console.log(foo);
// ƒ (a) {
//   return a * a;
// }

위 예제를 보면 변수 foo에 함수를 할당하고 출력해보면 함수가 담긴 것을 확인할 수 있다. 변수를 사용하여 끝에 괄호 ()를 추가하면 함수를 호출할 수 있다.

// ✅ 변수 끝에 괄호 ()를 사용해서 함수를 호출할 수 있다.
const foo = function (a) {
  return a * a;
};

console.log(foo(3));
// 9

함수를 인자로 전달하기

// ✅ f1 함수에게 인자로 함수를 전달하였다.
function f1(f) {
  return f(); // 인자로 받은 함수를 평가(수행)
}

console.log(
  f1(function () {
    return 10;
  })
);

// 10

위 예제의 f1 함수는 인자로 함수를 받아서 함수 내부에서 함수를 평가한 다음 그 결과를 리턴하는 함수(일급 함수)이다. 따라서 f1()는 어떤 함수를 인자로 넘겼느냐에 따라 결과값이 결정 될 것이다(순수 함수).

다른 함수(f1)에 인자로 전달된 함수(익명 함수)를 콜백 함수라고 한다. 위 예제에선 익명 함수(10을 리턴)가 콜백 함수이다.

일급 함수라는 개념과 순수 함수라는 개념을 이용해서 함수의 조합성을 높여 나가는 것함수형 프로그래밍이다.

 

다시 말해 언제 평가해도 상관 없는 순수 함수들을 만들고, 그 순수 함수들을 값(변수)으로 들고 다니면서 적절한 시점(필요한 시점)에 평가를 하는 방식으로 다양한 로직을 만들어 나가는 것이 함수형 프로그래밍인 것이다.

addMaker 함수 만들기 - 함수를 리턴하는 함수

// ✅ 함수를 리턴하는 함수

// a라는 값을 받고 a라는 값을 알고 있는 컨텍스트의 함수를 정의한 후 리턴한다.
function addMaker(a) { 
  return function (b) { // 클로저
    return a + b;
  };
}
// 결국 addMaker 함수를 호출하면 a라는 값을 기억하는 클로저가 된다.

// 따라서 변수 add10은 10의 값을 기억하는 클로저이다.
const add10 = addMaker(10);
// 10(a) + 20(b) = 30
console.log(add10(20)); // 30

// 15의 값을 기억하는 클로저
const add15 = addMaker(15);
// 15(a) + 20(b) = 35
console.log(add15(20)); // 35

위 예제의 addMaker 함수는 일급 함수의 개념과 클로저의 개념이 함께 사용된 함수이다. 함수를 값처럼 취급하기 때문에 함수 또한 리턴 할 수 있다.

함수를 리턴하는 함수를 고차 함수라고 부른다.

여기서 주의할 점은 위 예제의 클로저는 순수 함수도 된다는 점이다. a라는 매개변수는 클로저 내부에서 참조만 할 뿐 a라는 값을 직접 변경하지 않는다. 그리고 외부 어느 곳에서도 a가 존재하지 않는다.

 

그래서 위 예제의 클로저는 항상 동일한 값을 가리키고 있는 a라는 값에 b를 더하는 순수 함수이다. 결국 addMaker()를 통해 만든 add10이나 add15는 어느 시점에 평가를 해도 무관하다(항상 동일한 결과값을 낸다).

 

위의 예제들은 함수형 프로그래밍으로 작성한 다양한 방식의 코드들을 나타낸다. 함수를 값으로 다루면서 순수 함수를 정의하고, 함수의 평가 시점이 무관해서 다양한 방식으로 작성하는 것. 이것을 함수형 프로그래밍이라고 한다.

참고

일급 함수 - MDN

일급함수, add_maker, 함수로 함수 실행하기 - 인프런

 

[무료] 자바스크립트로 알아보는 함수형 프로그래밍 (ES5) - 인프런 | 강의

마플(http://www.marpple.com)의 CTO 유인동님이 알려주는 함수형 프로그래밍에 대한 강좌 입니다. 함수형 프로그래밍으로 라이브러리를 직접 만들어가며 함수형 프로그래밍의 패러다임과 코딩의 즐거

www.inflearn.com

반응형

'JavaScript > 함수형 프로그래밍' 카테고리의 다른 글

함수형 자바스크립트 기본기 정리  (0) 2021.10.03
일급 함수  (0) 2021.09.21
순수 함수  (0) 2021.09.20

댓글0