Skip to content
On this page

Pure Function

Pure Function

특징

순수 함수는 다음과 같은 특징을 갖는다.

  • 값이나 다른 함수를 반환한다.
  • 입력 값이 같으면 항상 결과 값이 같다.
  • Side Effects를 갖지 않는다.

Side Effects: 외부로부터/의 상태를 변경하거나 영향을 주는 것

이로 인해 다음과 같은 특성을 갖는다.

  • 파일, 메모리, 콘솔 등 입출력을 수행해서는 안된다. (부작용 야기)
  • 결과가 사용되지 않을 경우(= 다른 함수로부터 참조되지 않을 경우) 다른 표현식에 영향을 주지 않고 제거 가능하다.
  • 두 개 이상의 순수 함수에 데이터 의존성이 없는 경우, 순서를 반대로 하거나 병렬로 수행할 수 있고, 이는 서로 간섭하지 않는다. (thread-safe)
  • 언어 레벨에서 순수 함수를 지원할 경우, 프로그램 내부에서 순서를 변경하거나 함수 결합의 자유를 컴파일러에게 제공한다. (deforestation)
  • 객체의 경우 그대로 반환하지 않는 이상 반드시 값을 복사한 새 객체가 생성된다. 기존 객체를 건드릴 경우 / 기존 객체의 reference를 갖는 새 객체를 생성한 경우 외부에 영향을 주기 때문이다.

이점

  • 테스트 하기 쉬움
    • 입력 값에 대한 결과 값이 보장되기 때문에 테스트 하기 쉽다.
  • 분석 및 수정, 리팩토링이 쉬워짐
    • 테스트 코드 작성이 쉽고, 외부 요인을 신경쓸 필요가 없기 때문.

단점

  • 모든 함수가 순수 함수이면 외부에 어떤 영향을 미치지 않기 때문에 프로그램이 구동되지 않는다.
    • 함수형 패러다임은 완전히 순수 함수로 이루어진 패러다임이 아닌, 외부 상태 변화를 최소화하고 함수 실행 결과를 예측하기 쉽게 하여 버그 발생 가능성을 최소화 하는 것을 목적으로 한다.