함수형 프로그래밍

부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임이다.(개발할 때 가장 어려운 점은 변경을 추적하고, 상태를 유지하는 것)

  1. 부수 효과 : 함수에서 외부 변수의 상태 또는 인자의 상태를 직접 변경하는 것
  2. 순수 함수 : 부수 효과가 없는 함수 (어떤 함수에 어떤 값을 넣어도 항상 같은 값)

 

순수 함수

리턴 값은 오로지 파라미터에 의존한다.

같은 파라미터로 순수 함수를 호출한 경우 항상 동일한 결과 값을 리턴한다.

사이드 이펙트가 없다.(외부에 변화를 줄 수 없음)

 

비순수 함수

파라미터에 의존하지 않는다.

동일한 파라미터라도 다른 결과를 출력할 수 있다.

외부에 변화를 줄 수 있다.

 

결론

"순수 함수는 언제, 어디서든 무관하게 순수해야 한다."

"순수 함수는 외부의 상태를 변경하지 않으면서, 동일한 인자에 대해 항상 똑같은 값을 리턴해야 한다."

 

함수 프로그래밍도 장단점이 있다.

모듈화 수준이 높으면 재사용성이 높고 좋은 프로그래밍이라고 할 수 있다.(⇒ 효율적인 로직을 구성하는 것이 함수형 프로그래밍.)

 

순수 함수

function add(a, b) {
    return a+b;
}

console.log(add);
function add(obj, b) {
    return {val : obj.val + b}
}
let obj = {val : 10};
console.log(obj1.val);

let obj2 = add(obj, 5);
console.log(obj1.val);
console.log(obj2.val);

순수 함수가 아닌 함수

let c = 10;
function add(a, b) {
    return a + b + c;
}

console.log(add(1,2));
c = 20;
console.log(add(1,2));

// c의 값이 달라지면 결과 값도 달라지므로 순수 함수가 아니다.
// if c가 const이면, add는 순수 함수
let c = 20;
function add(a, b) {
    c = b;
    return a + b;
}

cosnole.log(c);
console.log(add(1,2));
console.log(c);

// add는 외부 변수의 값을 변경시키므로 순수 함수가 아니다.
let obj = {val : 10};
function add(obj, b) {
    obj.val += b;
}
// 객체의 상태를 변경시키므로 순수 함수가 아니다.

 

참고

https://jeong-pro.tistory.com/23