반응형
함수형 프로그래밍에서 불변성과 더불어 중요한게 순수함수다.
순수함수는 아래와 같은 조건을 가진다
- 같은 입력에 대해서 같은 결과를 return해야 한다
- 함수의 바깥 영역에 side effect를 초래하지 않아야한다
- return을 해야한다
여러 글들에서 순수 함수를 다루지만 핵심은 부수효과를 없애 side effect를 지우고, 재사용 가능한 모듈화 이다.
*부수효과란, '외부 상태를 변경하는 것 또는 함수로 들어온 인자의 상태를 직접 변경하는 것'
(1) 순수 함수인 경우
const adder = (a,b) => {
return a+b;
}
어떤 사람은 입력과 결과값이 같아야한다고 한다. 이는 a,b를 넣어 a+b로 나오는게 모습을 비순수함수로 판단할 여지가 있기에, 동일한 입력을 넣으면 항상 같은 결과가 나와야한다로 이해하는게 좋다.
(2) 비순수 함수인 경우
// case1
const adder= (a,b) => {
return a+b+Math.random();
}
// case2
const adder= () => {
const a = 1, b= 2;
return a+b+Math.random();
}
// case3
const ob = {
key: 0,
key1: 0
}
const adder= (a,b) => {
ob.key = 1
return a+b;
}
// case4
const ob = {
key: 0,
key1: 0
}
const adder= (a,b) => {
return a+b+ob[key];
}
각 case별 순수 함수가 못되는 이유
case 1: Math.random()에 따라 리턴 값이 항상 달라진다.
case2: 입력 인자가 없다.
case3: 외부 객체 ob에 값을 변경한다.
case4: 외부 객체 ob값을 가져온다.
(3) 비순수 -> 순수
// case1
const adderWithRandom= (a, b) => {
return a+b+randomGenerater();
}
// case4
const ob = {
key: 0,
key1: 0
}
const adder= (a,b, ob) => {
return a+b+ob[key];
}
case1은 adderWithRandom으로 식별자를 바꿔, 더하되 난수를 가미해주는 의미를 부여한다.
case4는 ob값을 인자로 받아, adder함수에서 객체의 값을 로직에 추가함을 부여한다.
요약
-순수 함수의 목적, '부수효과를 없애 side effect를 지우고, 재사용 가능한 모듈화 '을 기억하자
-함수 내외부 범위를 의식해야 상태에 대한 side effect를 지울수 있다
이상입니다
*코드가 깨지면 아래 링크를 참조해주세요
'개발 > 개발의 ㄱ' 카테고리의 다른 글
[Js] ES5 prototype vs ES6 Class (1) | 2023.06.26 |
---|---|
[Js] 유사배열객체 (0) | 2023.06.23 |
[Js] 함수형 프로그래밍 vs 객체지향 프로그래밍 (0) | 2023.06.23 |
RESTful api란 (0) | 2023.06.22 |
[AWS] auto-scaling 구현 정리 (0) | 2023.01.18 |