순수 함수(Pure Function)는 주어진 입력에 대해 항상 동일한 출력을 반환하고, 함수 외부의 상태를 변경하지 않는 함수이다. 순수함수는 함수형 프로그래밍의 핵심으로, 코드의 예측 가능성과 안정성을 높여준다.
순수 함수의 특징
- 동일한 입력에 대해 동일한 출력: 함수가 동일한 입력값을 받으면 항상 동일한 출력을 반환해야 한다.
- 부작용 없음: 함수는 외부 상태를 변경하지 않는다. 함수 내부에서만 상태가 변경되고, 함수가 종료되면 외부 상태는 그대로 유지된.
예시를 통한 이해
예시 1: 기본적인 순수 함수
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 항상 6을 반환
console.log(multiply(2, 3)); // 항상 6을 반환
multiply
함수는 입력값 a
와 b
에 따라 항상 같은 값을 반환하며 외부 상태를 변경하지 않으므로 순수 함수이다.
예시 2: 배열 필터링
function filterEvenNumbers(numbers) {
return numbers.filter(number => number % 2 === 0);
}
const numbers = [1, 2, 3, 4, 5, 6];
console.log(filterEvenNumbers(numbers)); // [2, 4, 6]을 반환
console.log(filterEvenNumbers(numbers)); // [2, 4, 6]을 반환
filterEvenNumbers
함수는 주어진 배열에서 짝수만 필터링한다. 입력된 배열이 동일하다면 항상 같은 결과를 반환하고, 외부 상태를 변경하지 않으므로 순수 함수이다.
불순 함수의 예시와 비교
불순 함수는 외부 상태를 변경하거나, 동일한 입력에 대해 항상 동일한 출력을 반환하지 않는다.
예시 3: 불순 함수
let count = 0;
function increment() {
count += 1;
return count;
}
console.log(increment()); // 1을 반환
console.log(increment()); // 2를 반환
increment
함수는 외부 변수 count
의 상태를 변경하기 때문에 불순 함수이다. 호출할 때마다 다른 결과를 반환한다.
순수 함수의 장점
- 예측 가능성: 동일한 입력에 대해 항상 동일한 출력을 반환하므로 함수의 동작을 예측할 수 있다.
- 테스트 용이성: 부작용이 없으므로 입력값과 출력값만으로 테스트할 수 있다.
- 병렬 처리 가능성: 외부 상태를 변경하지 않기 때문에 병렬 처리 시에도 안전하다.
- 유지보수 용이성: 함수가 독립적이기 때문에 코드의 유지보수가 쉬워진다.
- 디버깅 용이성: 외부 상태에 의존하지 않으므로 디버깅이 쉬워진다.
순수 함수의 활용
고차 함수(Higher-Order Functions)
고차 함수는 다른 함수를 인자로 받거나, 함수를 반환하는 함수이다. 순수 함수와 고차 함수는 함수형 프로그래밍에서 자주 사용된다.
function applyOperation(a, b, operation) {
return operation(a, b);
}
const add = (x, y) => x + y;
const subtract = (x, y) => x - y;
console.log(applyOperation(5, 3, add)); // 8을 반환
console.log(applyOperation(5, 3, subtract)); // 2를 반환
applyOperation
함수는 순수 함수로, 다른 순수 함수를 인자로 받아서 사용한다.
함수 합성(Function Composition)
함수 합성은 여러 순수 함수를 조합하여 새로운 함수를 만드는 기법이다.
const add = x => x + 1;
const multiply = x => x * 2;
const addThenMultiply = x => multiply(add(x));
console.log(addThenMultiply(5)); // 12를 반환 (5 + 1 = 6, 6 * 2 = 12)
addThenMultiply
함수는 add
와 multiply
순수 함수를 합성하여 만든 함수이다. 이러한 함수 합성은 함수형 프로그래밍에서 중요한 기법이다.
728x90
'Javascript' 카테고리의 다른 글
[JS] 타입스크립트의 Record 타입 (0) | 2024.07.31 |
---|---|
[JS] peerDepedencies (0) | 2024.07.30 |
[JS] FileReader 클래스 (0) | 2024.07.20 |
고차 함수 (0) | 2024.07.08 |
이중 NOT 연산자 (!!) (0) | 2024.07.02 |