[JavaScript] 순수함수

J·2023년 6월 7일
1

JavaScript

목록 보기
4/11

순수함수(Pure function)란?

  • 동일한 입력이 주어지면 항상 동일한 출력을 생성하는 함수.
  • 함수의 바깥 영역에 side effect를 초래하지 않는 함수.
  • 그러므로 예측 가능하고 추론하기 쉬움.

side effect?

  • 함수가 외부 상태를 변경하거나, 외부 상태에 의존해서 출력이 달라지는 경우 side effect가 발생한다고 함. 순수함수는 입력이 동일하면 항상 동일한 출력을 반환하고 외부 상태에 영향을 주지 않음.

순수함수의 예

  • 순수함수 - 기존 목적과 다른 효과를 만들지 않음.

    function add(a, b) {
      return a + b;
    }
  • 순수하지 않은 함수

    let count = 0;
    
    function increment() {
      count++;
      return count;
    }
    // count라는 변수를 증가시키고 새 값을 반환함.
    
    function getRandomNumber() {
      return Math.random();
    }
    // 호출될 때마다 0과 1사이 난수를 반환함.

순수함수의 장점

  • 코드 디버그, 테스트 및 유지 용이.
    • 외부 상태나 부작용에 대한 종속성이 없어 테스트하기 쉬움.
  • 신뢰성
    • 동일한 입력값이 주어지면 항상 동일한 출력을 생성하므로 예측 가능하고 추론하기 쉬우며 신뢰할 수 있음.
  • 재사용성 및 유지보수
    • 위와 같은 이유로 예기치 않은 동작을 유발할 수 있는 부작용이 없어 다른 코드에 영향을 끼칠 염려가 없으므로 리팩토링이 쉬우며 유지보수 편리함.
  • 조합성
    • 예측 가능한 결과를 반환하기에 다른 함수들과 조합해 사용하기 용이함.

단점은?

  • 불변성 요구
    • 순수함수는 종종 불변성을 요구함. 크거나 복잡한 데이터 구조를 처리할 때 작업하기 어려울 수 있음. 또한 이러한 불변성으로 데이터 구조를 수정하는 대신 복사본을 만들어야 하는 경우가 많기 때문에 이로 인해 성능이 저하되거나 메모리 사용량이 증가할 수 있음.
    • 불변성을 가진 순수함수의 예
      function addToArray(arr, value) {
        return [...arr, value];
      }
      // 함수가 새 배열을 생성하더라도 원래 arr 배열을 수정하지 않고 입력된 매개변수 집합에 대해 동일한 출력을 생성하기에 여전히 순수함.
  • 제한된 기능 및 복잡성
    • 상태 비저장 및 부작용이 없도록 설계되어있어 외부 상태에 의존하거나 부작용을 생성하는 작업을 수행할 수 없기에 외부 리소스에 대한 액세스가 필요한 특정한 경우에 기능이 제한될 수 있으며 함수의 복잡성이 증가할 수 있음.

정리

  • 순수함수는 입력에만 의존하여 동일한 입력이 주어지면 항상 같은 결과를 반환하며, 외부 상태에 영향을 주지 않고 불변성을 유지함. 이러한 특성으로 순수함수는 의도치 않은 버그를 줄이고 코드의 신뢰성을 높임.
  • 하지만 순수함수는 종종 불변성을 요구하는 등의 단점도 있으므로 항상 최선의 선택은 아님. 특정 요구 사항과 제약 조건을 고려해서 사용해야 할 것.
profile
벨로그로 이사 중

0개의 댓글