함수 개념
함수는 프로그래밍 적으로 단일 기능을 만들어내고, 함수들이 모여서 작동하는 프로그램을 만든다고 생각한다
수학적으로 동일한 입력값을 주면 동일한 출력값을 나오게 하는 동작방식을 말한다
어릴때 배웠던 `f(x) = x+1 ` 같은것... 프로그래밍에서도 다르지 않다!
국립특수교육원에서는 함수를 어떤 일을 수행하는 명령들을 하나로 묶어서 이름을 부여하고 필요할 때마다 그 함수를 호출하여 사용할 수 있는 프로그래밍 방법 이라고 정의한다.
함수형 프로그래밍
함수형 프로그래밍은 성공적인 프로그래밍을 위해 부수 효과를 미워하고, 조합성을 강조하는 프로그래밍 패러다임
- 부수 효과를 미워한다 -> 순수함수를 만든다.
- 조합성을 강조한다 -> 모듈화 수준을 높인다.
- 순수함수 -> 오류를 줄이고 안정성을 높인다.
- 모듈화 수준이 높다 -> 생산성을 높인다.
* 성공적인 프로그래밍? 좋은 프로그램을 만드는일
* 좋은 프로그램? 사용성, 성능, 확장성, 기획 변경에 대응력이 좋다
이러한 함수의 종류를 이용해 함수의 조합성! 모듈화를 높이는 것이 함수형 프로그래밍의 목적이다.
예측 가능한 순수함수로 값을 들고다니다가, 이를 활용해 일급함수로 동작하도록 등 다양한 로직을 만들어 활용한다.
순수함수
부수 효과가 없는 함수를 말한다. 즉 결정적 동작을 말하고, 이는 예측이 가능하다.
입력값이 같을 때 출력값이 고정되는, 함수의 기본 정의를 가진 함수이다.
외부에 영향을 끼치지 않아 의존적이지 않다.
function add(a, b) {
return a + b;
}
여기에서 순수함수가 되지 않으려면,
let c = 10;
function add2(a, b) {
return a + b + c;
}
함수 외부와 영향을 끼치는 요인이 있어야 한다.
일급 함수
함수형 프로그래밍의 대표적 특징이다.
변수에 함수를 할당하고,
const f1 = function(a) { return a * a; }; // 변수에 함수가 담길 수 있다.
const f2 = add; // 이전에 선언된 함수도 동일하게 할당할 수 있다.
인자로 함수를 넘길 수 있고,
function f3(f) {
console.log(f);
return 10;
}
함수를 리턴할 수 있다.
function f3(f) {
return f();
}
접근자의 개념을 사용한다.
* 접근자? 전역과 지역의 개념!
이외에도, 콜백 함수를 이용한 비동기 프로그래밍으로도 사용할 수 있다.