728x90

순수 함수(Pure Function)는 함수형 프로그래밍의 중요한 개념 중 하나로, 같은 입력에 대해 항상 같은 출력을 반환하며, 함수 외부의 상태를 변경하지 않는 함수를 말합니다. 이는 함수가 부작용(side effects)을 일으키지 않는다는 것을 의미합니다.

순수 함수는 코드의 가독성, 유지 보수성, 테스트 용이성을 향상시키며, 특히 병렬 처리와 같은 동시성 프로그래밍에서 유용합니다. 여기에서는 순수 함수의 정의, 특징, 장점, 그리고 JavaScript에서의 예제를 설명하겠습니다.

순수 함수의 정의와 특징

정의

  • 같은 입력에 대해 항상 같은 출력 반환: 순수 함수는 동일한 인자에 대해 항상 동일한 결과를 반환합니다.
  • 부작용 없음: 순수 함수는 외부 상태를 변경하지 않으며, 함수 외부의 변수에 영향을 미치지 않습니다.

특징

  1. 참조 투명성(Referential Transparency):

    • 순수 함수는 참조 투명성을 가집니다. 즉, 함수 호출을 함수의 반환 값으로 대체해도 프로그램의 동작이 변하지 않습니다.
  2. 예측 가능성:

    • 순수 함수는 입력 값만으로 결과를 예측할 수 있습니다. 외부 상태나 전역 변수를 의존하지 않기 때문에 예측 가능성이 높습니다.
  3. 테스트 용이성:

    • 순수 함수는 입력에 따른 결과가 명확하므로 단위 테스트가 용이합니다. 입력 값을 설정하고, 예상되는 출력을 비교하여 테스트할 수 있습니다.
  4. 병렬 처리에 적합:

    • 순수 함수는 외부 상태를 변경하지 않으므로 병렬 처리 시에도 안전하게 사용할 수 있습니다.

JavaScript에서의 순수 함수 예제

JavaScript에서는 순수 함수를 쉽게 작성할 수 있습니다. 여기에서는 몇 가지 예제를 통해 순수 함수의 개념을 살펴보겠습니다.

예제 1: 간단한 수학 함수

// 순수 함수: 두 숫자를 더함
function add(a, b) {
  return a + b;
}

console.log(add(2, 3)); // 항상 5를 반환
console.log(add(2, 3)); // 항상 5를 반환

위의 add 함수는 두 인자를 받아 더한 값을 반환합니다. 이 함수는 동일한 입력에 대해 항상 동일한 결과를 반환하므로 순수 함수입니다.

예제 2: 배열 필터링

// 순수 함수: 배열에서 짝수만 반환
function getEvenNumbers(numbers) {
  return numbers.filter(num => num % 2 === 0);
}

const numbers = [1, 2, 3, 4, 5, 6];
console.log(getEvenNumbers(numbers)); // [2, 4, 6]
console.log(getEvenNumbers(numbers)); // [2, 4, 6]

getEvenNumbers 함수는 주어진 배열에서 짝수만 필터링하여 새로운 배열로 반환합니다. 이 함수는 입력 배열을 변경하지 않으며, 동일한 입력에 대해 항상 동일한 출력을 생성하므로 순수 함수입니다.

예제 3: 문자열 변환

// 순수 함수: 문자열을 대문자로 변환
function toUpperCase(str) {
  return str.toUpperCase();
}

console.log(toUpperCase("hello")); // "HELLO"
console.log(toUpperCase("hello")); // "HELLO"

toUpperCase 함수는 입력 문자열을 대문자로 변환하여 반환합니다. 이 함수는 입력에 의해서만 결과가 결정되므로 순수 함수입니다.

순수 함수의 장점

1. 가독성

순수 함수는 입력과 출력이 명확하게 정의되어 있어 코드의 가독성이 높아집니다. 함수 내부에서 어떤 일이 발생하는지 쉽게 이해할 수 있으며, 코드의 흐름을 추적하기 용이합니다.

2. 유지 보수성

순수 함수는 외부 상태에 의존하지 않으므로 코드 변경 시 다른 부분에 영향을 미치지 않습니다. 이는 코드의 유지 보수를 용이하게 만듭니다.

3. 테스트 용이성

순수 함수는 특정 입력에 대해 항상 같은 결과를 반환하므로 테스트가 용이합니다. 단위 테스트에서 입력 값을 설정하고 예상되는 출력을 비교하여 간단하게 검증할 수 있습니다.

4. 병렬 처리

순수 함수는 부작용이 없으므로 여러 스레드나 프로세스에서 안전하게 호출할 수 있습니다. 이는 병렬 처리를 통해 성능을 향상시키는 데 유리합니다.

순수 함수가 아닌 예제

순수 함수가 아닌 함수의 예를 통해 순수 함수의 중요성을 이해할 수 있습니다. 다음은 부작용이 있는 함수의 예입니다.

예제: 부작용이 있는 함수

let counter = 0;

// 순수 함수가 아님: 외부 상태 변경
function increment() {
  counter += 1;
  return counter;
}

console.log(increment()); // 1
console.log(increment()); // 2

위의 increment 함수는 외부 변수 counter를 변경합니다. 이는 부작용을 일으키며, 동일한 입력에 대해 항상 같은 출력을 보장하지 않으므로 순수 함수가 아닙니다.

결론

순수 함수는 함수형 프로그래밍의 핵심 개념으로, 코드의 예측 가능성, 가독성, 테스트 용이성을 높이는 데 기여합니다. JavaScript에서 순수 함수를 작성함으로써 코드의 유지 보수성과 안정성을 개선할 수 있습니다. 순수 함수의 사용은 특히 대규모 애플리케이션 개발과 병렬 처리에서 큰 장점을 제공합니다.

728x90
반응형

+ Recent posts