함수형 프로그래밍은 모든것을 순수함수로 묶는 프로그래밍 패러다임이다. 순수함수를 통해 side-effect를 줄이고, 불변성을 유지하는 것을 목표로 한다.
1급객체, 또는 1급시민이라고 한다. 여기서 1급이라는 용어는 대상이 값이라는 것을 의미한다. 1급객체는 특정 값이 적용될 수 있는 곳에 적용될 수 있는 객체를 의미한다. 즉, 객체필드에 저장되거나 함수에 전달되거나, 반환되는 일 따위에 쓰일 수 있는 것들을 1급객체라고 하는 것이다.
var fortytwo = 42;
var fortytwo = [42];
var fortytwo = {number:42};
...
함수형 프로그래밍의 특징으로는, 함수를 1급객체로 취급한다는 점이 있다. 즉, 함수를 인자로 넘기거나, 리턴하는 등 1급객체로써 사용한다는 뜻이다.
var fortytwo = function(){return 42;};
var fortytwo = [42, function(){return 42;}];
var fortytwo = {number:42, func:function(){return 42;}};
...
순수함수란 간단하게 정의하면 다음과 같다.
입력값이 동일하면 결과가 동일하게 나오는 것이 보장되는 함수
다른말로 하자면, 외부요인의 영향을 받거나 주는일이 없으며, 동일입력 동일출력을 보장하는 함수를 의미한다. 대표적인 순수함수로는 map
함수가 있다.
var arr = [1,2,3];
var arr2 = arr.map(x=>x*2); // [2,4,6];
위 예시에서 알 수 있듯, 입력된 값이 같으면 항상 같은 값을 반환하며, 입력값 외의 외부요인의 영향을 받지 않고, 외부요인의 값을 변경하는 등의 side-effect도 존재하지 않는 훌륭한 순수함수의 예시이다.
Javascript는 딱히 함수형 프로그래밍을 위한 언어는 아니다. 함수형 프로그래밍은 어디까지나 프로그래밍의 패러다임 중 하나로, 프로그래밍에 있어 새로운 접근방식을 제안할 뿐이다. 단순히 이전부터 써왔기때문이라는 이유로 OOP에 집착하는 것이 아니라, 여러가지 패러다임을 만나보고 서비스에 걸맞는 방식을 채용하는 것이 바람직할 것이다.