함수형 프로그래밍이란 순수 함수(Pure Function)
를 통해 자료 처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하여 부작용(Side-Effect)
을 최소화며 프로그래밍하는 패러다임입니다.
이전에 포스팅한 객체지향 프로그래밍과 약간 대조되는 패러다임이라고 생각이 들었습니다.
그 주관적인 이유는 아래와 같습니다.
- 객체 단위의 효율적인 처리와 다르게 함수 단위의 독립적인 처리 방식을 고집한다.
- 일급 객체의 기준이 다음과 같다.
함수형 - 객체(Object) vs 객체지향 - 함수(Function)- 복잡한 구조로 구성되는 객체지향 프로그래밍과 달리 아주x2 간결한 구조로 구성된다.
📌
일급 객체
란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.“위키백과 - 일급 객체”
함수형 프로그래밍에는 몇 가지의 특징적인 함수의 형태와 개념이 존재합니다.
특징적인 함수
1. 순수 함수 (Pure Function)
순수 함수
는 함수형 프로그래밍을 하기 위해서 반드시 사용해야하는 함수 형태이며, 아래와 같은 특징이 있습니다.
부작용(Side-Effect)
이 없는 함수이다.- 함수의 실행이
외부에 영향
을 끼치지 않아야 한다. 동일한 입력 값
을 넣었을 때는 항상동일한 값을 반환
해야 한다.- 호출 위치와 상관없이 항상
동일한 값을 반환
해야 한다. - 위의 특징들로 인해서 안정적인
병렬 계산
이 가능하다.
2. 익명 함수 (Anonymous Function)
익명 함수
는 이름이 없는 함수를 말한다. 생성 즉시 실행되기 때문에 초기화 같은 작업에 효과적으로 사용되는 함수 형태이며, 아래와 같은 특징이 있습니다.
- 일회성 함수이다.
-
선언 이전에 사용될 수 없다.
📌 Javascript의 경우에는
호이스팅
으로 인해서 선언 이전에도 함수를 사용할 수 있지만, 익명 함수의 경우에는 호이스팅이 적용되지 않아서 선언 이후에 사용해야 한다. - 람다(Lambda)식을 통해 익명 함수를 수행할 수 있다.
3. 고계 함수 (Higher-Order Function)
고계 함수
는 함수 자체도 값(value)
으로 취급하여 사용하는 함수 형태이며, 아래와 같은 특징이 있습니다.
- 함수를 다른 함수의 입력 값으로 전달할 수 있다.
- 함수의 반환 값 역시 함수로 반환할 수 있다.
📌 함수형 프로그래밍-2 에서 이어서 포스팅 하도록 하겠습니다.