
함수형 프로그래밍은 수학적 함수를 이용하여 코딩한다는 프로그래밍 패러다임이다. 객체지향 프로그래밍(OOPS 프로그래밍)은 ‘어떻게’ 문제를 해결할 것인가에 집중하지만, 함수형 프로그래밍은 ‘무엇’을 해결할지 집중한다. 함수형 프로그래밍을 이용하면 코드를 압축적으로 짤 수 있으며 깔끔하게 작성할 수 있다.
함수형 프로그래밍의 특성으로 코드 재사용과 함께 효율성 개선, 높은 코드 가독성, 디버깅이 쉬운 문법 등을 언급할 수 있다. 함수형 프로그래밍은 데이터 사이언스 이용에도 최적화되어 있다. 이에, 인도 IT 전문 잡지 애널리틱스 인사이트는 개발자가 가장 많이 이용하는 함수형 프로그래밍 언어 10종을 아래와 같이 소개했다.
1. 클로저(Clojure)
클로저는 범용 프로그래밍 언어로, JVM와 호환 가능하며, 자바 호출 시 코드 복제가 발생하지 않는다. 멀티 스레드 프로그래밍에 적합하다. 컴파일된 언어이지만, 런타임을 지원하는 일부 기능이 존재한다. 매크로 문법이 지저분하기로 유명하긴 하지만, 본체는 비교적 구문이 간단하다.
2. 엘릭서(Elixir)
엘릭서는 높은 동시성과 짧은 대기시간 및 결함 허용 시스템을 지원하는 프로그래밍 언어로, 규모 확장성과 다용성이 강한 애플리케이션 개발에 주로 활용한다.
3. 하스켈(Haskell)
하스켈은 고급 함수형 프로그래밍 언어로 선언적 구문 및 정적 타이핑의 특성을 갖는다. 하스켈은 컴파일 언어로 잘못된 구문에 대한 에러 메시지를 제공하며 최적화 기능이 뛰어나 주로 고성능 애플리케이션에 활용된다. 인수(argument)에 적용되는 느긋한 계산법 (lazy evaluation)은 코드를 보다 종합적으로 구성하는 데 유용하며, 컨스트럭트에 대한 통제력도 높다.
4. 스칼라(Scala)
스칼라는 정적 언어와 동적 언어의 특성 모두를 가지며 데이터 파이프라인 구축이나 빅데이터 프로젝트에 이용된다. 또한 방대한 라이브러리 생태계를 보유하고 있으며, 정적 타이핑을 이용하여 복잡한 애플리케이션의 버그를 줄일 수 있다. 자바, JVM 호환성도 높으며 함수가 일급 객체로 다뤄지는 함수형 프로그래밍 언어이다.
5. 파이썬(Python)
파이썬은 함수형 언어는 아니지만 람다, map(), filter() 와 같은 일부 기능이 높은 수준의 병렬 코드 작성을 지원한다. 파이썬은 쉽게 읽히는 코드와 문법 때문에 데이터 사이언스와 머신러닝 프로젝트에 빈번히 활용된다.
6. 엘름(Elm)
엘름은 웹 애플리케이션이나 HTML 애플리케이션 개발에 주로 활용되며 리팩토링이 쉽고 고성능 컴파일러를 지원한다. 엘름은 프레임워크 설계의 완성도가 높아 애플리케이션 렌더링이 매우 빠르다. 또한 자바스크립트와 높은 상호운용성을 자랑하며 코드 가독성이 높고 코드 패턴의 추적 없이 다양한 프로젝트에 적용 가능하다.
7. F#
F#은 오픈소스 크로스 플랫폼 프로그래밍 언어로, 탄탄한 코드를 작성할 때 사용한다. F#은 C#의 함수형 언어 버전으로 데이터 타입이 다양하며 문법이 쉽고 패턴 매칭과 비동기 프로그래밍을 지원한다. F#은 데이터 중심 함수형 프로그래밍 패러다임을 기반으로 하기 때문에 함수를 이용하여 데이터를 변환할 수 있다.
8. 얼랑(Erlang)
얼랑은 절차 지향 프로그래밍 언어로 경량 프로세스를 이용한다. 얼랑의 최대 장점은 서로 소통 가능한 함수 생성에 있다. 얼랑은 채팅 앱, 메시지 큐, 블록체인 앱 등 메시지 기반 애플리케이션 개발을 위한 최고의 프로그래밍 언어로 평가받는다. 얼랑은 프로세스당 자동화된 스토리지 관리와 가비지 컬렉션이 작동하여 반응성이 매우 높은 애플리케이션을 제작할 수 있다.
9. PHP
PHP는 빠른 프로토타입 제작과 용이한 웹 개발로 유명하며 최소한의 코드로 웹 기반 콘텐츠 관리 시스템까지 제작할 수 있다. PHP는 페이스북이나 워드프레스 같은 플랫폼 개발에도 사용된 언어이다. 사용하기 쉬우며 HTML, 자바스크립트, XML 임베딩이 용이하다. PHP는 기본적으로 함수형 프로그래밍 언어이지만 고급 버전은 객체지향 프로그래밍도 지원한다.
10. 자바스크립트
스크립팅 언어는 기본적으로 객체 지향 및 함수형 프로그래밍 모두에 이용된다. 자바스크립트는 실시간 프로토타입 제작이 필요할 때 유용하며 프론트엔드 및 웹 개발자들에게 인기 있다. 브라우저가 아닌 환경에도 이용할 수 있으며, 게임, 모바일 애플리케이션 개발 등에도 활용된다.
[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]