공부/JS
순수함수란? 불변성과 사이드 이펙트와 연결하여 설명해주세요.
k1mwnjn
2023. 4. 5. 13:05
순수함수란?
- 같은 입력에 대해 같은 결과를 return하는 함수.
- 함수의 바깥 영역에 side effect를 초래하지 않는 함수. (함수 외부 데이터나 전달된 데이터를 변경하지않는 함수.) → 기존 목적과 다른 효과를 만들지 말아야 함.
순수 함수의 예
function add(a, b) {
return a + b;
}
순수하지 않은 함수의 예
let count = 0;
function increment() {
count++;
return count;
}
// count라는 변수를 증가시키고 새 값을 반환함.
function getRandomNumber() {
return Math.random();
}
// 호출될 때마다 0과 1사이 난수를 반환함.
순수함수의 장점
- 코드 디버그, 테스트 및 유지 용이
- 외부 상태나 부작용에 대한 종속성이 없어 테스트하기 쉬움.
- 신뢰성
- 동일한 입력 값이 주어지면 항상 동일한 출력을 생성하므로 예측 가능하고 추론하기 쉬우며 신뢰할 수 있음.
- 재사용성 및 유지보수
- 위와 같은 이유로 예기치 않은 동작을 유발할 수 있는 부작용이 없어 다른 코드에 영향을 끼칠 염려가 없으므로 리팩토링이 쉬우며 유지보수 편리함.
- 조합성
- 예측 가능한 결과를 반환하기에 다른 함수들과 조합해 사용하기에 용이함.
등의 장점이 있음. 전반적으로 순수함수를 사용하면 유지 관리 및 테스트에 용이하며 효율적인 코드를 만들 수 있음.
그렇다면 단점도 있을까?
- 불변성 요구
- 순수함수는 종종 불변성을 요구함. 크거나 복잡한 데이터 구조를 처리할 때 작업하기 어려울 수 있음. 또한 이러한 불변성으로 데이터 구조를 수정하는 대신 복사본을 만들어야 하는 경우가 많기 때문에 이로 인해 성능이 저하되거나 메모리 사용량이 증가할 수 있음.
불변성을 가진 순수 함수의 예
function addToArray(arr, value) {
return [...arr, value];
}
// 함수가 새 배열을 생성하더라도 원래 arr 배열을 수정하지 않고 입력된 매개변수 집합에 대해 동일한 출력을 생성하기에 여전히 순수함.
- 제한된 기능 및 복잡성
- 순수함수는 상태 비저장 및 부작용이 없도록 설계되어있어 외부 상태에 의존하거나 부작용을 생성하는 작업을 수행할 수 없기에 외부 리소스에 대한 액세스가 필요한 특정한 경우에 기능이 제한될 수 있으며 함수의 복잡성이 증가할 수 있음.
등의 단점도 있음. 순수함수는 많은 이점을 제공하지만 항상 최선의 선택은 아님. 특정 요구 사항과 제약 조건을 고려해서 사용해야 함.