함수형 프로그래밍이란 순수 함수(Pure Function)를 통해 자료 처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하여 부작용(Side-Effect)을 최소화며 프로그래밍하는 패러다임입니다.

이전에 포스팅한 객체지향 프로그래밍과 약간 대조되는 패러다임이라고 생각이 들었습니다.

그 주관적인 이유는 아래와 같습니다.

  • 객체 단위의 효율적인 처리와 다르게 함수 단위의 독립적인 처리 방식을 고집한다.
  • 일급 객체의 기준이 다음과 같다.
    함수형 - 객체(Object) vs 객체지향 - 함수(Function)
  • 복잡한 구조로 구성되는 객체지향 프로그래밍과 달리 아주x2 간결한 구조로 구성된다.

📌 일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.

“위키백과 - 일급 객체

함수형 프로그래밍에는 몇 가지의 특징적인 함수의 형태와 개념이 존재합니다.


특징적인 함수

1. 순수 함수 (Pure Function)

순수 함수는 함수형 프로그래밍을 하기 위해서 반드시 사용해야하는 함수 형태이며, 아래와 같은 특징이 있습니다.

  • 부작용(Side-Effect)이 없는 함수이다.
  • 함수의 실행외부에 영향을 끼치지 않아야 한다.
  • 동일한 입력 값을 넣었을 때는 항상 동일한 값을 반환해야 한다.
  • 호출 위치와 상관없이 항상 동일한 값을 반환해야 한다.
  • 위의 특징들로 인해서 안정적인 병렬 계산이 가능하다.

2. 익명 함수 (Anonymous Function)

익명 함수는 이름이 없는 함수를 말한다. 생성 즉시 실행되기 때문에 초기화 같은 작업에 효과적으로 사용되는 함수 형태이며, 아래와 같은 특징이 있습니다.

  • 일회성 함수이다.
  • 선언 이전에 사용될 수 없다.

    📌 Javascript의 경우에는 호이스팅으로 인해서 선언 이전에도 함수를 사용할 수 있지만, 익명 함수의 경우에는 호이스팅이 적용되지 않아서 선언 이후에 사용해야 한다.

  • 람다(Lambda)식을 통해 익명 함수를 수행할 수 있다.

3. 고계 함수 (Higher-Order Function)

고계 함수 는 함수 자체도 값(value) 으로 취급하여 사용하는 함수 형태이며, 아래와 같은 특징이 있습니다.

  • 함수를 다른 함수의 입력 값으로 전달할 수 있다.
  • 함수의 반환 값 역시 함수로 반환할 수 있다.

📌 함수형 프로그래밍-2 에서 이어서 포스팅 하도록 하겠습니다.