Front-End/Javascript

함수형 프로그래밍

태나미 2021. 3. 24. 00:19

프로그래밍 패러다임

- 절차 지향 프로그래밍

- 객체지향 프로그래밍

- 함수형 프로그래밍

- 함수형 반응형 프로그래밍

함수형에 특화된 프로그래밍 언어들

  • F#
  • Haskell
  • OCaml 
  • Erlang

함수형 프로그래밍을 지원하는 언어들

  • Javascript
  • Kotlin
  • Go
  • Python
  • Java
  • C++ 등

1958년 최초의 함수형 프로그래밍 언어인 LISP가 나오게 되었는데, 최근에 함수형 프로그래밍이 다시 화제가 된 이유는, 요즘 AI, IoT, 빅데이터, 비트코인이 화제가 되면서, 방대한 데이터를 빠르게 계산해서 병렬적, 안정적으로 처리하는 것의 중요성이 부각되면서 다시 주목받기 시작한 것

 

파이프라인과 비유해 보면, 인풋(입력)을 넣으면 처리과정을 거쳐서 아웃풋(결과)가 나오게 되는 것이며, 외부에서는 파이프라인 내부의 상태를 보거나 접근할 수가 없으며, 안에서도 밖에 접근할 수가 없다.

함수형 프로그래밍을 이용해서 프로그램을 만든다는 것은 이런 함수들을 적용하고, 묶어서 프로그램을 구성해 나가는 것.

함수형 프로그래밍의 특징

1. Pure Functions (순수함수)

함수에서 외부의 상태값을 참조하거나 또는 외부의 상태를 변경하는 것은 순수함수가 아니다.

동일한 인자를 넣었을 때, 동일한 결과값을 반환하고, 외부에 영향을 받지 않도록 작성하여야 한다.

2. Stateless, Immutability (비상태, 불변성)

함수에 인자로 전달된 데이터를 변경하는 것은, 함수형 프로그래밍이 아니니다.

함수형 프로그래밍에서는 새로운 오브젝트를 만들어서 결과값으로 전달해야 한다.

외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경하지 않음으로써 불변성을 유지할 수 있다.

자바스크립트에서는 불변성의 데이터 타입 이라는 것이 따로 없기 때문에, 

Object.freeze 라는 함수를 이용해서 오브젝트를 불변성으로 만들어 줄 수도 있다.

3. Expressions Only

if나 for와 같은 여러가지 문장(expressions)를 사용하는 것은 함수형 프로그래밍이 아니다.

4. First-class and higher-order functions ( 일급함수와 고차함수 )

함수를 변수에 할당하거나, 함수에 인자로 전달하거나 리턴하는 등의 일들을 할 수 있는 First-class

함수 자체를 인자로 전달하거나, 함수에서 또 다른 함수를 리턴하는 higher-order functions 이 두가지 속성을 가지고 있어야 한다.

 

함수형 프로그래밍을 잘 이해하려면,

Monad, Semigroup, Applicative, Monaid, Functor, Disjunction 등 다양한 컨셉들에 대해서 잘 이해해야지 진정한 함수형 프로그래밍을 구현할 수 있다.

 

프로그래밍 패러다임은 어느 하나가 다른 하나를 대처하는 것이 아니라, 원하는 목표에 따라서 적절한 것을 잘 골라서, 선택해서 사용해야 한다.

 

출처: www.youtube.com/watch?v=4ezXhCuT2mw&t=392s