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