함수의 부작용은 프로그램 설계에 불필요한 문제를 일으키고, 찾기가 매우 어려운 오류를 가져오고, 프로그램의 가독성을 감소시킵니다. 엄격한 함수형 언어에서는 부작용이 없는 함수가 필요합니다.
함수의 부작용과 관련된 여러 개념, 순수 함수, 불순 함수, 참조 투명.
순수 함수(Pure Function)
입력 및 출력 데이터 흐름이 모두 명시적입니다. 명시적이란 함수가 외부 세계와 데이터를 교환하는 방법이 매개변수와 반환 값이라는 단 하나의 방법뿐이라는 의미입니다. 함수가 함수 외부에서 받아들이는 모든 입력 정보는 매개변수를 통해 함수 내부로 전달됩니다. 함수가 함수 외부에 출력하는 모든 정보는 반환 값을 통해 함수 외부로 전달됩니다.
불순함수(Impure Function)
그 반대입니다. 암시적이란 함수가 매개변수와 반환값 이외의 채널을 통해 외부 세계와 데이터를 교환한다는 의미입니다. 예를 들어 전역 변수를 읽거나 수정하는 것을 외부 세계와의 암시적 데이터 교환이라고 합니다.
Reference Transparent(참조 투명)
참조 투명성의 개념은 함수의 부작용과 관련되어 영향을 받습니다. 프로그램의 동작에 영향을 주지 않고 프로그램 내 어디에서나 동일한 값의 두 표현식을 서로 바꿀 수 있다면 프로그램은 참조 투명성을 갖습니다. 참조투명하지 않은 언어의 의미는 이해하기 쉽고 모호함이 적다는 장점이 있습니다. 순수 함수형 언어에는 변수가 없으므로 참조적으로 투명합니다.
다음 예는 참조 투명성과 함수 부작용의 조합을 보여줍니다