Posts [CS] 일급함수(First-class function)? 함수에 급수가 있다니...
Post
Cancel

[CS] 일급함수(First-class function)? 함수에 급수가 있다니...

1. 일급함수(First-class function)


인프런에서 함수형 프로그래밍 개요를 수강하던 중 일급함수라는 단어를 만나고, 내심 놀랐다. 함수에 급수가 있다니…

가볍게 이해해보자면 javascriptfunctionargumentsfunction을 받을 수 있는 함수이기 때문에 일급함수라고 한다.
(그렇다면 그게 불가능한 언어도 있나보다.)

본인도 글을 작성하며 이해하는 중이다.
새로운걸 발견했을 땐 MDN으로 가본다.

A programming language is said to have First-class functions when functions in that language are treated like any other variable. For example, in such a language, a function can be passed as an argument to other functions, can be returned by another function and can be assigned as a value to a variable.

그러니까 프로그래밍 언어에서 function을 변수처럼 다루면 그 언어는 일급함수를 가지고 있다는 것 같다. (그러니까 그게 안되는 언어가 분명히 있나보다.)

Even if your function was named, you can use the variable name to invoke it. Naming it will be helpful when debugging your code. But it won’t affect the way we invoke it.

심지어 function이 이름을 가지고 있어도 거기에 variable nameinvoke해서 사용할 수 있다.

1
2
3
4
5
const ingRaccoon = function raccoon(doing) {
  return `${doing} raccoon`;
};

console.log(ingRaccoon("digging")); // digging raccoon

이렇게 raccoon이라는 이름을 가진 함수에 ingRaccoon이라는 이름을 할당할 수 있다. 그 동안 자연스럽고 당연하게 여기면서 사용해왔는데 javasrciptfunctionFirst-class function이라서 가능했나보다.

세상은 자바스크립트 아니겠습니까!


다시 강의 내용으로 돌아가보면

1
2
3
4
5
6
7
8
9
function add_maker(a) {
  return function (b) {
    return a + b;
  };
}

var add10 = add_maker(10);

console.log(add10(20)); // 30

위의 예에서

  • add_makerreturn값으로 function을 내보내고 있다.
  • functiona + breturn한다.
  • add10add_makerparameter10을 넣어주었다.
  • 결과는 당연하게도 30이다.
1
var add10 = add_maker(10);

이해가 어려워서 add_maker에서 return되는 function을 다시 표현해봤다.

1
2
3
var add10 = function (b) {
  return 10 + b;
};

눈으로 확인이 되어야 이해가 되는게 좀 아쉽지만 바꿔놓고 나니 훨씬 눈에 잘 들어온다.
결국 add_makerreturnadd10이라는 이름이 붙지 않은 function이었다. 이 개념을 자유자재로 사용하려면 조금 더 익숙해질 시간이 필요할 것 같다.

그리고 여기에 closurepure function을 발견할 수 있다고 한다. 추후에 더 공부해야 할 부분이다.

여기에서 조금 더 나아가면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function raccoon(fn1, fn2, fn3) {
  return fn3(fn1() + fn2());
}

raccoon(
  // fn1
  function () {
    return 2;
  },
  // fn2
  function () {
    return 1;
  },
  // fn3
  function (j) {
    return j * j;
  }
); // 9

이렇게 raccoon 함수의 parameter로 세 개의 function을 넣어 줄 수 있다.

  • fn12를, fn21return한다.
  • raccoonreturnfn1fn2return을 더한 값을 fn3parameter로 넣어 돌려주고 있다.
  • fn3arguments 하나를 받아서 제곱해주고 있다.
1
2
3
function raccoon(fn1, fn2, fn3) {
  return fn3(2 + 1);
}

위에서처럼 바꿔서 보면 이렇게 되는 것이므로 결과는 9가 되는 것을 쉽게 예측할 수 있었다.

코딩에 있어서도 패러다임이 있다고 하는데 최근에 객체지향 프로그래밍(OOP)함수형 프로그래밍(FP)에 대해 알게 되었고, 이러한 형태는 함수형 프로그래밍(FP)의 기본이 된다고 한다. 여기에 대해서 이미 여러 영상과 글을 통해 공부를 하고 있지만 아직 뚜렷하게 정리되는 것이 없어서 차근차근 개념부터 정리중이다.

그렇다면 지금까지 내가 해온 것은 ROP(Raccoon Oriented Programming)

This post is licensed under CC BY 4.0 by the author.

[CS] 반가산기가 뭘까

[Digging] Bundler exec jekyll serve is not working

Comments powered by Disqus.