- 함수형 프로그래밍이란?
- (꼬리 질문) 자바스크립트 클로저란?
- (꼬리 질문) 자바스크립트 프로토타입이란?
1. 함수형 프로그래밍이란?
- 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고,
상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
- 문이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다.
(출처:위키백과)
Input이 같으면 Output이 일정한 순수함수로 코딩을 했기 때문에
예상하지 못한 Output이 나왔을 때 Input값만 점검하면 된다.
그 Input값 역시 다른 순수함수의 Output이라면, 그 순수함수를 확인해보면 된다.
전체의 코드를 모두 점검할 필요가 없다는 뜻이다.
즉, 개발을 어떻게 하면 효율적으로 잘 할 수 있을지에 대한 의문에서 출발했을 때,
"순수함수를 조합하여 프로그래밍해보니 좋더라!"
라는 결론때문에 "함수형 프로그래밍" 방법을 적용하라는 것이다.
(개발 기간과 비용을 단축하여 효율적인 개발을 할 수 있는 프로그래밍 방법)
함수형 프로그래밍의 특징
1) 순수함수(Pure function)
- 동일한 입력에는 항상 같은 값을 반환해야 한다.
- 함수의 출력(return)은 오로지 그 함수에 입력된 값(input)에만 의존한다.
- 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
(Self-contained되어야 한다, 즉, side effect가 없다.)
- Side effect가 없다는 의미는 오로지 출력(return) 만 수행한다는 의미이다.
2) Function composition
- 둘 이상의 함수를 조합하는 과정을 말한다.
- 함수형 프로그램은 여러 작은 순수 함수들로 이루어져있기 때문에
이 함수들을 연쇄적으로 또는 병렬로 호출해서 더 큰 함수를 만드는 과정으로
전체 프로그램을 구축해야 한다.
재사용이 가능한 순수 함수를 원하는 Output을 위해 서로 엮는 것이다.
함수를 엮기 때문에 고차원함수(Higher-Order Functions)를 활용해야 한다.
고차원 함수(Higher-Order Functions)ex: filter(), map(),reduce()
- 함수를 인자(argument)로 받는다.
- 함수를 결과로 반환한다.
- 함수형 프로그래밍에서는 함수가 1등급 객체(first-class object)이다.
- 함수가 1등급 객체이므로, 함수는 고차원 함수를 구현할 수 있다.
1등급 객체(first-class object (citizen, type, entity, value로 표현되기도 한다.)
- 자료구조에 저장된다.
- 인자(argument)로 전달된다.
- 결과로 반환한다.
- 함수가 실행되는 동안 새로운 함수가 만들어질 수 있다.
객제지향 프로그래밍 vs 함수형 프로그래밍
명령형은 어떻게 풀어내는지(how to solve)에 집중하고,
선언형은 무엇을 풀어내는지(what to solve)에 집중한다.
예를 들어, 최종적인 목표가 '물을 마시기' 라고 해보자.
(명령형) 어떻게(how) 할 것인지를 설명
☛👉 객체지향 프로그래밍 ➲ 상태 변화 ➲ Side effect 발생
☛👉 함수형 프로그래밍 ➲ 상태 변화 없음 ➲ Side effect 미발생
3) Immutability(불변성)
- 순수함수는 예측된 input과 함께 실행된다.
- Input이 변하면, 순수함수는 개발자가 예측하지 않은 다른 출력값을 만든다.
- 즉, 다른 출력값은 다른 함수에도 영향을 미친다.
4) Function decoration
- 순수함수를 재사용하다보면, 이미 만들어진 순수함수를 그대로 적용하기보다
일부 개선하거나, 조금 다른 방향으로 수정해야 하는 상황이 발생할 수 있다.
이 때 function decoration을 적용한다.
- 직접적으로 순수 함수를 수정하진 않지만, 함수에 실행 시점이나 방식을 조율하는 것을 말한다.
참고사이트