Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 순수 함수(Pure Function)란? 개념과 예제로 완벽히 이해하기

순수 함수(Pure Function)란 무엇인가?

순수 함수(Pure Function)는 결정론적(deterministic) 함수를 의미합니다. 즉, 동일한 입력값을 넣을 때마다 항상 동일한 출력값을 반환하는 함수입니다. 수학적으로 표현하면 잘 정의된(well-defined) 함수와 같은 개념입니다.

순수 함수는 다음과 같은 특징을 가집니다.

  • 오직 자신의 매개변수(인자)에만 의존합니다.
  • 함수 외부 범위에 있는 변수를 변경하려고 하지 않습니다.
  • 부작용(side effects)을 일으키지 않습니다.

순수 함수가 아닌 경우 1: 외부 변수에 의존하는 함수

아래 예제는 순수 함수가 아닙니다. 자신의 매개변수가 아닌, 함수 외부 범위에 있는 변수(val1과 val2)에 의존하고 있기 때문입니다.

<html>
<body>
<script>
    let val1 = 6;
    let val2 = 4;
    function pure() {
        return val1 * val2;
    }
    document.write(pure());
</script>
</body>
</html>

실행 결과

24

순수 함수가 아닌 경우 2: 매개변수와 외부 변수를 함께 사용하는 함수

다음 예제의 함수는 비록 자신의 매개변수(arg)를 사용하지만, 동시에 외부 변수(val)에도 의존하고 있습니다. 따라서 이 역시 순수 함수가 아닙니다.

<html>
<body>
<script>
    function pure(arg) {
        let val = 100;
        return val * arg;
    }
    document.write(pure(2));
</script>
</body>
</html>

실행 결과

200

순수 함수의 올바른 예

다음 예제는 진정한 순수 함수를 보여줍니다. 함수가 작업을 수행하는 과정에서 외부 변수가 전혀 관여하지 않으며, 오직 전달받은 매개변수만으로 결과를 계산합니다. 따라서 동일한 인자를 전달하면 언제나 동일한 출력값을 반환합니다.

<html>
<body>
<script>
    function pure(arg) {
        return 4 * arg;
    }
    document.write(pure(2));
</script>
</body>
</html>

실행 결과

8

왜 순수 함수를 사용해야 할까요?

순수 함수는 다음과 같은 실질적인 장점이 있습니다.

  • 테스트 용이성: 입력과 출력이 명확하게 결정되므로 단위 테스트(Unit Test) 작성이 매우 쉽습니다.
  • 예측 가능성: 외부 상태에 영향을 받지 않기 때문에 코드의 동작을 예측하기 쉽고 디버깅이 간편합니다.
  • 캐싱(Memoization): 동일한 입력에 대해 항상 같은 결과를 반환하므로, 한 번 계산한 결과를 캐싱하여 성능을 최적화할 수 있습니다.
  • 동시성 안전성: 공유 상태를 변경하지 않으므로 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.

React, Redux 등 현대적인 자바스크립트 라이브러리와 프레임워크에서도 순수 함수 개념은 핵심 원칙으로 활용되고 있으므로, 반드시 익혀두는 것이 좋습니다.