Functional Programming with Javascript
What is the functional programming
함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다.
수학적 함수와 명령형 프로그래밍에서 사용되는 함수는 차이가 있는데, 명령형의 함수는 프로그램의 상태의 값을 바꿀 수 있는 부작용이 생길 수 있다. 이 때문에 명령형 함수는 참조 투명성이 없고, 같은 코드라도 실행되는 프로그램의 상태에 따라 다른 결과값을 낼 수 있다. 반대로 함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하므로 인수 x에 같은 값을 넣고 함수 f를 호출하면 항상 f(x)라는 결과가 나온다. 부작용을 제거하면 프로그램의 동작을 이해하고 예측하기가 훨씬 쉽게 된다. 이것이 함수형 프로그래밍으로 개발하려는 핵심 동기중 하나이다.
여기서 가장 중요한 개념 중 하나인 pure function 이란 부작용이 없는 함수 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 의미한다. 때문에 pure function 은 병렬적인 연산이 가능하고, 스레드에 안전하다.
이러한 pure 함수는 언제나 같은 값을 반환함이 보장되기 때문에 아무런 제약없이 사용되어도 안전하며, 때문에 이러한 pure function 들은 다른 함수의 input 으로 제공되어도 안전하다. 이렇게 함수형 프로그래밍 에서는 함수 자체가 변수처럼 선언되고 input 으로 사용되는 등 변수와 같이 취급되는 fist class citizen이다.
이렇게 함수를 인자로 받는 함수를 higher order function 이라고 한다.
선언형 프로그래밍과 명령형 프로그래밍
example of imperative programming
1 | var string = "This is the midday show with Cheryl Waters"; var urlFriendly = ""; |
example of declarative programming
1 | const string = "This is the mid day show with Cheryl Waters" const urlFriendly = string.replace(/ /g, "-") |
위 예제와 같이 선언형 프로그래밍에서는 모든 작업이 replace라는 선언아래 감추어져 있고, 개발자가 코드를 보았을 때 어떤일이 벌어지는지 매우 명확하게 알 수 있다.
code itself describes what is happening
Comments