순수함수란?
순수함수는 부수효과(side Effects)가 발생하지 않는 함수
부수함수(Side Effects)란?
- 함수가 만들어진 목적과는 다른 효과 또는 부작용으로 함수에 예상할 수 없는 일이 생길 가능성이 존재한다면 이 함수는 부수 효과를 가질 수 있는 함수
- 함수 안팎에서 뭔가 예기치 않은 일이 생길 가능성이 있는 함수는 순수 함수가 될 수 없습니다.
- 불순 함수 예)
- 비동기 요청을 보내는 함수: 요청이 실패할 수 있기 때문에 순수함수가 안됨
- 입력을 포함하는 함수: 입력에 따라 출력이 달라질 가능성이 있기 때문에 안됨
- 매개변수로 들어온 값을 직접 변경하는 함수: 반환값이 달라지기 때문에 안됨
불순 함수(impure funct) 코드
// http 요청을 보내는 함수 : 순수함수 될 수 없음
const getData = () => {
axios.get('http://data.url')
.then(...)
.catch(...)
}
// 입력 내포한 함수 : 순수함수 될 수 없음
const typeInput = () => {
const input = prompt("Message");
return input;
}
// 파라미터를 직접 변경하는 함수 : 순수함수 될 수 없음
const changeParams = (arr, elem) => {
arr.push(elem);
return arr;
}
순수 함수(impure funct) 코드
const num_arr = [1, 2, 3, 4, 5];
// 매개변수의 값을 직접 변경하는 불순함수
const addSixImpure = (arr) => {
// 매개변수에 직접 6 추가
arr.push(6);
return arr;
};
// 매개변수를 복사한 값을 변경하는 순수함수
const addSixPure = (arr) => {
// 펼침 연산자로 새로운 배열에 6 추가
newArr = [...arr, 6];
return newArr;
};
// 매개변수 arr에 6이 있는지 확인하는 함수
const hasSix = (arr) => {
if (arr.includes(6)) {
return true;
} else {
return false;
}
};
const new_arr = addSixImpure(num_arr);
console.log(hasSix(num_arr)); // true : 불순 함수
const new_arr = addSixPure(num_arr);
console.log(hasSix(num_arr)); // false : 순수 함수
사용 사례
- 프론트엔드 프레임워크 계열 상태 관리 (Hooks, Redux 등)
- 함수형 프로그래밍 패러다임에서 핵심 개념으로 사용
'Computer Science' 카테고리의 다른 글
Mysql 풀텍스트인덱스(Full-Text Index) (0) | 2024.05.08 |
---|---|
클로저(Closure) (0) | 2024.04.24 |
코루틴(Coroutine) (0) | 2024.04.24 |
코틀린(Kotlin) (0) | 2024.04.07 |
병렬처리(Parallel Processing) (0) | 2023.04.06 |