순수 함수와 비순수 함수

    반응형

     

    🚀 순수 함수? 비순수 함수?


    함수라면 그냥 함수인 거지 순수 함수는 뭐고 비순수 함수는 뭐일까?

     

    순수 함수와 비순수 함수에 대해 얘기하기 이전에 함수형 프로그래밍에 대해 얘기해보려고 한다.

     

    자바스크립트는 주로 객체지향 프로그래밍함수형 프로그래밍으로 나뉘는데 객체가 기본이 되는 프로그래밍을 객체지향 프로그래밍이라고 하고, 함수형 프로그래밍은 말 그대로 함수가 기본이 되는 프로그래밍을 의미한다.

     

    왜 갑자기 함수형 프로그래밍 이야기가 나왔느냐!? 궁금할 수 있다. 함수형 프로그래밍을 사용하는 이유가 순수 함수를 통해 부수 효과를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이기 위해 사용하기 때문이다.

     

    그래서 순수 함수는 뭐고 부수효과는 뭔데? 바로 알아보자

     

    순수 함수 & 비순수 함수(feat. 부수 효과)

    순수 함수어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수 효과가 없는 함수를 의미한다.

    비순수 함수외부 상태에 의존하거나 외부 상태를 변경하는, 즉 부수 효과가 있는 함수를 의미한다.

     

    그러면 부수 효과란 뭘까요? side effects라고도 불리는 부수 효과는 함수가 만들어진 목적과는 다른 효과 또는 부작용이 발생하는 것을 말합니다. 즉, 함수에 예상 밖의 일이 생기는 것이다.

     

    순수 함수비순수 함수의 비교를 위한 간단한 예시를 들어 보겠다.

     

    순수 함수 예시

    1. 순수 함수의 특징은 함수의 외부 상태를 변경하지 않는 것이다.

    위 예시를 보면 count 라는 변수를 선언한 뒤 increase 함수에 인수로 전달하면 증가한 1이라는 값이 나오지만 count 변수의 값은 변하지 않는다.

     

    2. 두번째 특징은 동일한 인수가 전달되면 언제나 동일한 값을 반환한다.

    increase(count) 즉 계속 같은 인수인 count를 주게 되면 언제나 동일한 값이 1이 나오게 된다.

     

    비순수 함수 예시

    반대로 비순수 함수

     

    1. 함수의 외부 상태에 따라 반환 값이 달라진다.

    count라는 변수에 의존해서 함수가 return 하는 반환 값이 달라진다.

     

    2. 함수의 외부 상태를 변경하는 부수 효과가 있다.

    맨 마지막줄에서 확인할 수 있듯, count 변수를 변경한다.

     

    하지만 여기까지 보더라도 왜 순수 함수를 사용해야 하는지 잘 모를 수 있다. 순수 함수를 써야하는 이유는 함수가 외부 상태를 변경 즉, count와 같은 변수를 변경한다면 상태 변화를 추적하기 어려워진다. 비순수 함수인 increase 함수는 코드의 복잡성 또한 증가시킨다.

     

    자바스크립트의 함수형 프로그래밍

    • 조건문과 반복문을 제거해 복잡성을 해결한다. (가독성이 떨어지기 때문)
    • 또한 변수의 생명주기를 최소화하여 상태 변경을 최소화시킨다. (누군가의 의해 변수값은 변경될 수 있다면 큰 오류가 발생할 수도 있기 때문)
    • 재사용성 또한 높아진다.

     

    순수 함수의 다른 예시들도 많이 있다. 배열의 메서드에서도 찾아 볼 수 있는데, 예를 들면 배열의 원본을 변경하는 메서드가 아닌 map, filter, reduce 역시 순수 함수의 예시이다.

     

    여러분 순수 함수 씁시다~~

    반응형

    댓글