[JavaScript] 순수함수와 비순수함수

야매·2021년 9월 3일
2
  • 순수함수: 어떤 외부상태에 의존하지도 않고 변경하지도 않는, 부수효과가 없는 함수
  • 비순수함수: 외부상태에 의존하거나 외부상태를 변경하는, 부수효과가 있는 함수

    *부수효과: 외부 상태를 변경하거나 함수로 들어온 인자 상태를 변경하는 것

    순수함수


    -동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수다.

    즉, 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 반환값을 만든다.

      var count = 0;
      
      function increase(n) {
      return ++n;
      }
      
      count = increase(count);
      console.log(count);  //1

    순수함수가 반환한 결과값을 변수에 재할당해서 상태를 변경한다.

    비순수함수


    -외부 상태에 따라 반환값이 달라진다.
    -함수의 외부상태를 변경하는 부수효과가 있다.

    let num3 = 10
    func sum(num1: Int, num2: Int) -> Int {
    	return num1 + num2 + num3
    }

    num3을 전역변수라면 결과값은 num3의 값에 따라서 변경이 된다.


    var count = 0;
    
    function increase() {
    return ++n;
    }
    
    increase();
    console.log(count);  //1

    let obj = {
    a: 1
    };
    
    function func(obj) {
    return obj.b = 1; // 인자로 받은 객체에 b 값을 추가하여 리턴
    }
    
    func(obj);
    
    console.log(obj); // { a: 1, b: 1 }

    위 함수는 외부 obj 객체에 b가 추가되었기 때문에 순수함수가 아니다.




    비순수함수는 외부상태(count)를 변경하므로 상태변화를 추적하기 어려워진다. 따라서 함수 외부 상태의 변경을 지양하는 순수함수를 사용하는 것이 좋다.

  • 0개의 댓글