함수형 프로그래밍(Functional Programming)이란?

No Image

함수형 프로그래밍(Functional Programming)이란?

Concept

Avoids changing State and Mutable data

  • 상태와 Data를 변경하는 것을 피하면서 프로그래밍하는 것입니다.
  • 즉 대입문[assignment statements] 없이 프로그래밍하는 것입니다.

일급 시민(First-class citizens)

함수를 일급 시민으로 관리하겠다.

일급 시민이 된다는 것은 무엇을 의미할까요?

  • Argument로 전달할 수 있다는 의미. -> 함수가 Argument로 전달될 수 있다.
  • 함수의 Return값이 될 수 있다는 의미. -> Return값이 함수가 될 수 있다.
  • 값을 수정하기도, 값을 할당할 수도 있다는 의미. -> 함수를 값처럼 할당하기도 수정도 할 수 있다.

일급 시민은 누가 있을까요?

  • value
  • type
  • object
  • entity

Higher-order functions

  • 함수를 Argument로 받는 함수.
  • 함수를 Return하는 함수.

Pure functions

  • Memory or I/O관점에서 Side-effect가 없는 함수.
  • 함수의 실행이 외부에 영향을 끼치지 않는 함수.

Pure function을 사용하면 우리는 무엇을 얻을 수 있을까요?

  • 함수 자체가 독립적이고 Side-Effect가 없기 때문에 스레드에 안전성을 보장받습니다.
  • 스레드에 안전성이 보장되면 병렬적인 계산을 진행할 수 있습니다.

Referential transparency

  • 함수 프로그래밍은 대입이 없는 특성을 가지고 있기 때문에 참조(Reference)에 투명성을 가지고 있습니다.
  • 참조 투명성을 통해 기존의 Value는 변경되지 않고 유지됩니다.

Currying

  • 여러개의 인자를 가진 함수를 호출 할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받는 기법입니다.

함수형 프로그래밍 사용하면 무엇을 얻을 수 있을까요?

“대입문의 사용을 포기하면 자유로운 동시성을 얻을 수 있다.”

No Image

현재 우리는 많은 CPU를 가진 컴퓨터를 사용하고 있습니다. 그렇다고 일을 하나의 CPU에만 일을 시키지는 않죠. 어떻게 하면 컴퓨터의 모든 Cycle을 사용할 수 있을까? 많은 프로세스가 동시에 하나의 메모리 값을 변경하는 경우를 방지하기 위해서 Semaphores라는 기술을 사용했지만 함수형 프로그래밍은 더 이상 기술을 사용하지 않아도 됩니다.

즉 병렬처리에 대해 안전하고 빠르게 처리할 수 있습니다.

단점은 없을까요?

  • 기본적으로 추상화 단계가 지나치게 높아져서 읽기어려운 코드 즉 Reading이 어렵습니다.
  • 기존의 자료구조를 상당히 들어엎어야 한다는 부담이 있습니다.
  • 함수형 언어의 장점인 병렬/분산 프로그래밍 또한 실제로는 기존 명령형 언어들의 기능을 가지고도 충분히 구현할 수 있습니다.

대표적인 예로는 무엇이 있을까요?

  • Scala
  • Haskell
  • Clojure
  • LISP

Reference

0%