[0]

함수형 프로그래밍에 대해 알아보자. 특장점을 위주로 간략히 개요를 알아본다.

 

[1]

우선 함수형 언어는 기본적으로 모든 변수가 immutable이다. 무슨 말이냐면, 한번 x = 3으로 선언하고 나면, 이 값을 바꿀 수 없다는 말이다. 즉 x = 4와 같은 구문은 x를 4로 바꾸는 게 아니라 기존의 x를 파괴하고 새로운 x를 4로 만드는 것과 같다. 절차 지향적 언어에 익숙하다면 이게 무슨 해괴망측한 일인지 싶지만 이로 인해 상당한 장점을 누릴 수 있다. 우선 '변수'의 개념이 없기 때문에 오브젝트를 공유하기가 쉽고 race condition이 발생하지 않는다. 또한 디버깅이 쉽고 [2]와 더불어 컴파일러 단의 최적화에 유리하다. 

 

[2]

함수형 언어에는 순수 함수(pure function)를 지원한다. 이는 수학의 함수와 유사하게 입력값이 동일하다면 항상 리턴값이 같음을 보장한다. 즉 함수 실행 시에 side effect가 없음을 보장할 수 있다. 덕분에 몇 가지 장점들이 생기는데 다음과 같다. 

  1. 함수의 결과가 사용되지 않는다면, 함수를 아예 실행하지 않을 수 있다.
  2. 함수 호출을 언제나 constant로 대체할 수 있다. 즉 fn(x,y)를 언제나 z로 대체할 수 있다. 이를 이용한 memoization도 가능하다.
  3. 프로그램 전체가 pure function으로 이루어져 있다면, 함수 호출의 순서를 어떤 방식으로든 재배치하거나, 병렬 실행할 수 있다.

[3]

함수형 언어의 순수 함수는 또한 1급 객체(first-class)로 취급된다. 1급 객체란, 변수에 할당하거나 함수에 파라미터로 넘기거나 리턴값으로 반환하거나 하는 등이 가능한 객체를 일컫는다. 즉 함수 자체를 클래스나 primitive type처럼 하나의 오브젝트로 취급하는 게 가능하다. 이를 통해 고차 함수를 만들거나 익명 함수를 파라미터로 전달하는 등의 동작이 가능해진다. 

 

[3]

함수형 언어에서는 iteration을 지양하고 재귀를 사용한다. 물론 절차형 언어에서도 반복문 대신 재귀를 사용할 수 있긴 하다. 하지만 스택 프레임으로 인한 메모리 오버헤드 때문에 일반적으론 반복문을 사용한다. 하지만 함수형 언어에선 꼬리 재귀(tail recursion)라는 강력한 기능덕에 메모리 오버헤드 없이 사용할 수 있다. 더군다나 [2]에서 언급한 memoization이 기본적으로 제공되는 것은 덤이다.

 

 

[참고]

en.wikipedia.org/wiki/Functional_programming

 

Functional programming - Wikipedia

Programming paradigm In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions t

en.wikipedia.org

 

 

+ Recent posts