프로그래밍

[함수형 프로그래밍] 순수 함수 (Pure Function)

Folivora 2020. 1. 13. 07:11

순수 함수란? Pure Function?

정의는 아주 쉽다. 함수의 출력 결과가 오로지 입력 결과에 따라 결정되는 함수들을 말한다. 다시 말하면 함수라는 블랙박스 안에 아무런 내부 상태가 없어서 입력을 주면 "항상" 같은 출력이 나오는 함수다. 외부와 상호작용 하는 경우는 외부의 상태가 함수의 실행 과정에 영향을 미칠 수 있으므로 순수 함수가 아닌 것으로 간주한다.

 

예측 가능성, 병렬화, 캐시

만약 GUI 구현을 할 때는 객체의 내부 상태가 중요하므로 OOP가 중요하다. 현재는 많은 사람들의 관심사가 데이터를 어떻게 오류 없이 처리할지다. 내부 상태에 따라 결괏값이 달라지지 않으므로, 테스트 케이스를 만들거나 병렬 처리가 쉽다. 순수 함수의 경우 큰 데이터를 단순히 여러 개로 쪼개서 같은 함수만 적용시키면 그만이다. 내부 상태가 있으면 상호 배제(mutual exclusion) 등 고려해야 할 것이 많다. 마지막으로 함수의 결과를 저장할 수 있으므로(!) 자주 사용되는 입력에 대해서 caching이 가능하다.

 

잡담

미국 대학교에서는 C/C++를 가르치긴 하지만 문법적인 부분보다는 OCaml과 같은 함수형 프로그래밍 언어들, 큰 문제를 작은 문제로 쪼개서 풀 때 필요한 재귀에 대한 개념을 알려주려고 커리큘럼이 구성된다. 어린 시절 접했던 Quick Basic으로 오염된(...) 나의 머리 역시도 함수형 프로그래밍을 접하면서 난삽했던 개념들이 다시 하나로 뭉쳐지게 되었다. 내가 고민했던 많은 부분들이 사실은 같은 문제의 반복임을 발견하고선 조금 화가 나기도 하였다. (시간낭비 너무 많이 한 것 같아서...)