본문 바로가기

Javascript/함수형 프로그래밍

일급 함수, 간단한 함수형 프로그래밍


1급 함수에 대해서 알아보기전에 한 번쯤은 들어봤을 1급 시민의 개념에 대해서 간단하게 알아보는 것이 좋을 거 같습니다.



1급 시민 ?


1급 시민이란 우리가 흔히 알게 모르게 코딩을 할때 이용했던 특징들을 가지고 있다. 1급 시민의 특징은 다음과 같습니다.


  • 변수(variable)에 할당 할 수 있어야 한다.
  • 인자(parameter)로 전달 할 수 있어야 한다.
  • 반환 값(return value)으로 전달 할 수 있다 


위 3가지의 특징을 가지고 있습니다.


숫자 타입의 데이터들은 대부분의 프로그래밍 언어에서 1급 시민의 조건을 충족 합니다.



1급 함수 ?


1급 객체라는 말도 있는데 1급 객체는 말 그대로 1급 시민의 조건을 충족하는 객체를 말하며, 자바스크립트에서 함수는 객체로 관리 되기때문에 1급 객체에 속합니다.

더 나아가 1급 함수란 1급 객체이면서 아래의 추가조건을 만족하는 함수를 말합니다.


  • runtime 생성이 가능하다
  • 익명으로 생성이 가능하다.

위 두 조건을 보면 C언어에서 함수는 1급함수가 아니게 됩니다.


1급 함수의 조건을 충족하는 예제는 다음과 같습니다.




다들 자바스크립트로 코딩을 하면서 자연스럽게 1급함수의 특징을 이용하고 계셨을거라고 생각 됩니다.


그럼 이제 간단한 함수형 프로그래밍을 해보겠습니다.




위에 보이는 addMaker 함수는 앞서 말씀드렸던 1급 함수, 순수함수의 조건을 충족하는 함수입니다.
이런 식으로 함수를 만들어 프로그래밍 하는 것을 함수형 프로그래밍이라 합니다. 이 함수는 클로저(closure) 개념도 녹아져 있습니다.
클로저(closure)는 조만간 자바스크립트 기초 카테고리를 만들어 정리 해보도록 하겠습니다.

조금 더 이해를 돕기 위해 다른 예제를 보겠습니다.



위에 보이는 함수는 2을 반환하는 함수와 1을 반환하는 함수를 인자로 받아 세 번째 인자로 받는 함수에 첫 번째 함수와 두 번째 함수를 호출하여 반환 받은 값을 더해서 세 번쩨 함수의 인자로 전달 하게 됩니다.


그리고 세 번째 함수가 하는 일은 인자 a를 전달 받아 a의 제곱을 반환 해줍니다.


보시면 아시겠지만 함수형 프로그래밍은 이런 식으로 순수함수와 1급함수의 특징을 이용하여 함수를 조합하고 원하는 시점과 원하는 인자를 적용 하면서 결과를 만들도록 로직을 만들어 가는 것입니다.


이상 마치겠습니다.