함수형 프로그래밍은 무엇일까? 객체지향설계와 비교되는데 사실 비교할 문제가 아니다. 어디든 사용할 수있는 패러다임이다. 하지만 함수형 프로그래밍의 특징을 이해하고 더 어울리는 곳에 사용하는 것이 중요하다.

함수형 프로그래밍의 학술적인 정의와 실용적인 정의

💡  부수 효과 없이 순수 함수만을 사용하는 스타일

일반적으로 위와 같이 정의하한다. 부수 효과(side effect)를 없애고, 순수 함수(pure function)을 지향하는 프로그래밍으로 말이다. 하지만 이는 실용적이지 않은 학문적인 정의이다. 프로그램은 부수효과를 만들기 위해 존재하기 때문이다. 이메일을 보내고, 월급을 계산하고, 정보를 저장하는 행위 모두는 외부에 영향을 미치는 부수효과이다. 부수효과 없는 프로그램은 쓸모가 없다.

그렇다면 조금 더 실용적인 함수형 프로그래밍은 무엇인가? 부수효과를 효율적으로 격리하는 프로그래밍 기법인 것 같다.

함수형 프로그래밍에 기술

적절한 격리를 위해서 기술의 용어 정리가 필요하다.

액션

외부와 커뮤니케이션하는 함수. 실행 시점과 실행 횟수에 영향을 받는 연산을 뜻한다. 함수형 프로그래밍 목표는 이 액션을 다른 두 가지 기술로부터 분리하여 격리시키는 것이다. 늘 조심하게 다뤄야하는 함수다.

계산

흔히 순수 함수, 부수효과가 없는 함수를 뜻한다. 실행 시점과 실행 횟수에 관계 없이 오직 인풋(argument)와 아웃풋(return)에 의존한다. 이러한 특징 때문에 테스트하기 좋은 코드가 된다. 또한, 외부에 영향을 미치지 않기 때문에 액션에 비해 자유롭게 호출하기 쉽다.

데이터

이벤트에 대한 기록. 동등성 비교나 어떠한 해석이 들어가야 의미를 갖게 된다. 자유롭다.

⇒ 함수형 프로그래밍에서 가장 먼저 해야할 일은 액션, 계산, 데이터를 구분하는 일이다. 그리고 함수형 프로그래머는 액션 < 계산 < 데이터 순으로 좋아한다. 오른쪽으로 갈수록 제어하기 쉽고 자유로워 지기 때문이다.

함수형 프로그래밍의 장점

함수형 프로그래밍은 분산 시스템에 잘 어울린다.

우선 분산시스템은 문제가 일어날 수 있는 특징 몇가지를 가지고 있다.