최근 AI에 대한 연구가 붐이 일면서 그에 따라 Programming Paradigm도 변화가 생기고 있다. Programming Paradigm은 개발자에게 개발 관점을 갖게 하고, 개발 방법을 결정하는 역할을 하기 때문에 개발자는 이런 변화에 대해서 항상 신경써야 한다.
최근에는 FP(Functional Programming)이라는 것이 Paradigm 변화에 많은 영향을 주고 있는데, 이 것이 무언인지, Paradigm에 주는 변화는 어떠한지 대해서 정리해보려고 한다.
Google에 검색을 해보면 다음과 같이 진화의 관점으로 표현 하고 있다.

개인적인 생각으로는 절반은 동의하고 절반은 동의하지 않는다.
Programming Paradigm은 방법론으로써 개발자가 제품 개발을 할 때, 환경에 따라 선택을 하면 되는 것이다. 그리고 실제로 처음 시작된 시기를 따져 보면 FP 방법론은 1930년대 알론조 처치라는 미국 수학자가 쓴 람다 대수 논문을 근간으로 시작된 것이라, 1960년대에 시작된 OOP(Object-Oriented Programming)보다 그 시기가 오래 되었다. 이런 이유 때문에 동의할 수 없다.
(이미 오랫동안 FP 개발 언어들이 사용되어 오고 있다. ex. LISP, Python, Scala, R, Clojure, F# 등등 )
다만, 기술 발전의 흐름에 따라 보면 다르게 생각할 수 있다.
FP 방법론은 수학적 사고와 밀접한 관련이 있어서 표현 자체가 수학적 정의에 가까운 형식을 띄고 있다. 이 것은 수학적으로 표현되는 데이터 분석 알고리즘들에 적용되어 좋은 성능과 그 동안 OOP으로는 해결하기 어려웠던 문제들이 해결되고 있기 때문에 어느 정도 동의 할 수 있다.
그러면, OOP와 FP의 어떤 특징이 있는지 알아보자.
- OOP(Object-Oriented Programming)
- 실제 세계를 프로그램에 담기 위한 것이기 때문에 Object(Class) 정의가 중요하다.
- 클래스 상속을 통해 다형성을 구현 할 수 있다.
- 함수 표현 수식은 ‘O.f(x)’ 형태로 표현 된며, O(Object)의 참조 값에 따라 f(x)의 결과가 달라질 수 있다.(부작용)
- FP(Functional Programming)
- 수학적 동작 및 기능을 구현하기 위해서 데이터와 함수를 독립시켰기 때문에 데이터로부터 완전히 독립된 순수 함수 구현이 중요하다.
- 데이터로 부터 독립적이기 때문에, 동일한 입력에 대해서 동일한 결과를 보여 준다.
- 함수 표현 수식은 ‘f(x)’ 형태로 표현 되며, 입력 변수가 함수인 ‘F(x) -> F(f(x))’형태(Lambda, 고계함수)로 연속적인 표현이 가능 하다.
위 특징들로 보면, FP가 OOP를 완전히 대체를 하는 것은 아닌 것을 알 수 있다. 각 방법론이 시작된 관점의 근거가 다르기 때문이다.
OOP는 현실세계의 Object를 가상세계에 표현하고 각 Object들 간의 상호작용을 나타내는 집합으로 보는 관점으로 시작 되었다. 그리고 FP은 추상적인 수학을 표현하기 위한 연속적인 함수들의 연결로 보는 관점으로 시작되었다.
이런한 다른 이유로 OOP보단 FP이 수학적 알고리즘으로 접근하는 Big Data 분석이나 AI 분야에 적합하게 되었다. 그리고 이런 FP의 부가적인 효과로 연속적인 함수 즉, Lambda(고계함수)를 사용할 수 있게 되다보니 코딩하는 입장에서 코드를 조금 더 간결하게 만들 수 있게 되어서 개발자들이 선호하고 있다. 이로 인해서 FP이 Programming Paradigm에 영향을 주고 있는 것이다.
하지만, 근본적으로 Program이란 것은 현실세계의 것을 가상세계에 표현하는 것이기 때문에 Object를 완전히 배제 할 수는 없다. 때문에 OOP과 FP은 상호보완적으로 이해하고 사용하는 것이 변화하는 Programming Paradigm에 대응하는 올바른 접근 방법이 아닐까 생각한다.