함수형 프로그래밍과 Rx

얼마전 지인들 간의 모임에서 함수형 프로그래밍에 대해 했던 얘기를 정리한 것이다.
대화 중에 이 내용을 글로 써야겠다 싶었는데, 귀찮아서 미루다가 거의 한달쯤 지나서야 쓰고 있다.
우린 Rx 를 얘기하고 있었다. 근데 FP(Function Programming)과 혼재되어 말하면서 대화가 꼬이기 시작했다. 이 시점에서 함수형 프로그램(FP)과 반응형 프로그래밍(Rx) 을 정리할 필요가 있다.
사실 둘은 전혀 상관이 없다.

Functional Programming

함수형 프로그래밍은 익히 여러 군데서 주워들은대로 오래 전부터 있던 개념이었다. 하지만 시대적 요구가 OOP를 선택했다. 그리고 요즘 다시 FP가 대두 되는 것은 역시 시대적 요구 때문이다.
멀티 코어와 멀티 쓰레드로 동시성 프로그래밍이 필요해 지면서 OOP로는 한계가 드러났다.
병렬로 로직이 수행되도 문제가 없으려면 처리하려는 데이터가 처리 도중에 외부에 의해서 변형되면 안되니까 immutable이 도입됐고, 로직 수행 중에 외부의 영향을 받지 않도록 조건을 걸다 보니 pure function이 되었다. 그러고 나니 그 오래 전에 하던 FP가 제시하던 것과 동일하게 됐고, 결국 FP가 다시 주목받기 시작했다.

여기서 Pure Function 이란 파라미터로 주어진 값 외에 다른 값을 참조하거나 리턴값 외에 다른 값을 변경하지 않는 코드 덩어리 이다. 이를 “Side Effect 가 없다” 라고 한다. 이를 강조하고 실수를 막기 위해서 사용되는 자료형들은 immutable 들이 되어야 했다.

함수형 프로그래밍은 이 개념을 지키면 어떤 언어로든 가능하다. 하지만 함수형 언어를 구분하는 것은 함수를 어떻게 취급하느냐에 따라 나뉜다. 함수형 언어는 함수를 변수 또는 리스트에 넣거나 파라미터로 전달하거나 리턴값으로 사용할 수 있다. 함수를 이렇게 처리할 수 있으면 함수형 언어다. 이 관점에서 Java 8이 FP를 도입했다고는 하나 함수형 언어가 아니다. (함수 자체를 취급하지 않고 함수가 담긴 객체를 취급하니까)

Reactive Programming

반응형 프로그래밍은 말 그대로 반응에 의해 동작하는 프로그래밍 기법이다. 모든것을 통제하는 절차적 방식이 아니라 변수간, 로직간, 서로간에 조건을 작성해 두고 변화가 일어날 때 조건에 의해서 동작하는 방식으로 프로그래밍 하는 것이다. 이 개념이 도입된 많은 프레임워크나 라이브러리들이 있지만 요즘에는 단연 Rx 가 인기다. 그게 뭔지는 다른 여러곳에 자료가 많으니 굳이 말할 필요 없다.

결론은 함수형 프로그래밍과 반응형 프로그래밍은 서로 다른것이다. Rx 에서 함수형의 그것처럼 처리되는 일부 문법적인 표현이 있다고 해서 서로 헷갈리거나 비슷하게 인식해서는 안되겠다.