순수함수와 함수형 프로그래밍 정의 - ChoDragon9/posts GitHub Wiki
순수함수는 동일한 인자에 상응하는 동일한 리턴값을 가지는 함수입니다. 그러므로, 평가시점이 변경이 되더라도 동일한 결과를 리턴하기 때문에 다루기 쉬운함수가 됩니다. 순수함수는 객체의 변경이 필요할 경우 새로운 객체를 생성하여 리턴합니다.
외부변수를 사용하거나 외부변수를 변경하면 순수함수가 아닙니다. 비순수함수는 평가시점에 따라 다른 결과값을 가지기 때문에 평가시점을 미세하게 다뤄야 합니다.
// 순수함수
const add = (a, b) => a + b;
const add1 = (obj, b) => ({val : obj.val + b})
// 비순수함수
const add2 = (a, b) => a + b + c;
const add3 = (a, b) => {
c = b;
return a + b;
};
const add4 = (obj, b) => {
obj.val += b;
};
일급함수는 값으로 다룰수 있는 것을 말합니다. 값으로 다룰수 있기 때문에 인자로 전달할 수 있고, 리턴할 수 있고 언제든디 정의가 가능합니다.
const f1 = a => a * a;
const f2 = add;
const f3 = f => f();
함수형 프로그래밍은 애플리케이션, 함수의 구성요소, 더 나아가서 언어 자체를 함수처럼 여기도록 만들고, 이러한 함수 개념을 가장 우선순위에 놓는다. 함수형 사고방식은 문제의 해결 방법을 동사(함수)들로 구성(조합)하는 것.
// 함수를 가장 우선순위에 놓는 것
moveLeft(dog);
moveRight(duck);
moveLeft({ x: 5, y: 2});
moveRight(dog);
// 데이터(객체)를 우선순위에 놓는 것
duck.moveLeft();
duck.moveRight();
dog.moveLeft();
dog.moveRight();