순수 함수(Pure Function)는 컴퓨터 프로그래밍에서 부수 효과가 없고 참조 투명성을 가진 함수를 의미한다. 함수형 프로그래밍의 핵심 개념 중 하나로, 함수의 실행 결과가 오직 입력 인자에만 의존하며 프로그램의 실행 상태를 변경하지 않는 특징이 있다.

배너 광고

정의 및 조건

순수 함수는 다음 두 가지 핵심 조건을 만족하는 함수를 말한다.

  1. 동일한 입력, 동일한 출력: 함수의 반환 값은 오직 전달된 인자에 의해서만 결정된다. 전역 변수, 정적 변수, 입력 스트림 등 외부의 상태에 영향을 받지 않으므로, 같은 인수를 넣고 호출하면 언제나 같은 결과를 반환한다.
  2. 부수 효과(Side Effect) 부재: 함수 실행 과정에서 외부 세계의 상태를 변경하지 않는다. 즉, 함수 외부의 변수를 수정하거나, 콘솔에 출력하거나, 파일 쓰기 및 네트워크 요청을 보내는 등의 작업을 수행하지 않는다.
입력 x가 함수 f를 통해 출력 y로 변환되는 다이어그램
입력값에 따라 결과값이 결정되는 순수 함수의 기본 구조수학에서 기원한 프로그래밍 패러다임, 순수 함수

참조 투명성

입력 값이 같을 때 결과 값이 항상 같다는 성질을 참조 투명성(Referential Transparency)이라고 한다. 프로그램 내의 함수 호출 표현식을 그 결과값으로 치환하더라도 프로그램의 전체적인 동작이 변하지 않는다면, 해당 표현식은 참조에 투명하다고 한다. 이러한 특성 덕분에 개발자는 프로그램의 전체 상태 변화를 추적할 필요 없이 해당 코드 블록만으로 동작을 이해하는 국소 추론(Local Reasoning)이 가능해진다.

장점 및 효과

순수 함수를 사용하면 다음과 같은 이점을 얻을 수 있다.

  • 예측 가능성: 외부 요인에 따라 결과가 변하지 않으므로 코드의 동작을 쉽게 예측할 수 있다.
  • 테스트 용이성: 함수가 독립적으로 작동하므로 별도의 환경 설정 없이 입력값에 따른 결과값을 검증하는 단위 테스트를 작성하기 쉽다.
  • 재사용성: 입력과 결과가 명확히 분리되어 있고 외부 의존성이 없으므로 모듈화가 쉬우며 다른 프로그램에서도 재사용하기 좋다.
  • 안정성: 병렬 및 동시성 프로그래밍 환경에서 여러 스레드가 동시에 함수를 호출하더라도 공유 자원을 수정하지 않으므로 데이터 경합 등의 문제를 방지할 수 있다.

예시

수학적 함수는 순수 함수의 대표적인 예시이다. 예를 들어 함수 f(x)=2xf(x) = 2xxx가 2일 때 항상 4를 반환하며, 호출 시점에 따라 결과가 달라지거나 외부 상태를 변경하지 않는다.

프로그래밍 언어에서의 예시는 다음과 같다.

  • 순수 함수: 숫자의 내림 값을 구하는 floor, 두 값 중 큰 값을 찾는 max, 문자열의 길이를 반환하는 length 등.
  • 비순수 함수: 호출할 때마다 다른 값을 반환하는 random(), 현재 시간을 가져오는 Date.now(), 외부 전역 변수를 수정하는 함수 등.

참고 자료

5
순수 함수(Pure Function)순수 함수(Pure Function) ### 순수 함수(Pure Function) 함수는 주어진 입력으로 계산하는 것 이외에 프로그램의 실행에 영향을 미치지 않아야 하며, 이를 부수 효과(side effect)가 없어야 한다고 합니다. 이러한 함수를 순수 함수라고 합니다. 예를 들어, count, length 함수는 임…http://minsone.github.io/programming/pure-function순수 함수와 불변성 - 동민솔루션순수 함수와 불변성 - 동민솔루션 12장 : 함수형 프로그래밍 # 순수 함수와 불변성 함수형 프로그래밍(Functional Programming, FP)은 명령형(Imperative) 프로그래밍이나 객체지향(Object-Oriented) 프로그래밍과는 다른 방식으로 소프트웨어를 구축하는 패러다임입니다. FP는 계산을 함…https://andongmin.com/docs/typescript/ch12/ch12-1Pure functionPure function In computer programming, a pure function is a function that has the following properties: 1. the function return values are identical for identical arguments(no vari…https://en.wikipedia.org/wiki/Pure_function컴포넌트를 순수하게 유지하기 – React일부 자바스크립트 함수는 순수합니다. 순수 함수는 오직 연산만을 수행합니다. 컴포넌트를 엄격하게 순수 함수로만 작성하면 코드베이스의 규모가 점점 커지더라도 예상밖의 동작이나 당황케하는 버그를 피할 수 있습니다. 이런 효과를 얻기 위해서는 몇 가지 규칙을 따라야 합니다. - 순수성이란 무엇인지 그리고, 순수성을 통해 버그…https://ko.react.dev/learn/keeping-components-purePure Functions | Scala Book | Scala DocumentationPure Functions | Scala Book | Scala Documentation Scala Book # Pure Functions Language #### Outdated Notice This page has a new version. A first feature Scala offers to help you w…https://docs.scala-lang.org/overviews/scala-book/pure-functions.html

관련 문서