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

이학성·2022년 2월 9일
0
post-thumbnail
post-custom-banner

함수형 프로그래밍이란?

프로그램의 크기가 커지면서 발생하는 스파게티 코드 등 유지보수가 까다로웠던 명령형 프로그래밍의 단점을 보완하고자 나온 프로그래밍 패러다임으로 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법이다. 또한, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리한다.

함수형 프로그래밍은 다른 언어에 비해 비교적 빨리 나왔음에도 수학의 원리와 연관이 있기 때문에 배우는데 어려워 인기를 끌지 못 하다가 최근 들어 빅데이터, 비트코인 등의 발전으로 방대한 데이터를 빠르게 계산하는게 중요해진 요즘 사람들의 관심을 가지게 되었다.

파이프라인 처럼 입력(Input)을 넣으면 처리과정을 거쳐서 결과(Output)이 나온다. 외부에서는 이 파이프라인의 정보를 접근할 수 없고 안에서도 밖을 접근 할 수가 없다. 이런 함수들을 묶어서 프로그램을 구성해나가는 것을 말한다.

특징

1급객체 (First Object, 또는 1급 시민)

  • 변수나 데이터를 구조안에 담을 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

자바스크립트의 함수는 객체이므로 1급 함수이다.

순수함수 (Pure Functions)

외부의 상태값을 참조하거나 외부의 상태를 변경할 수 없고 동일한 인자를 넣었을때 항상 동일한 결과값을 반환하고 외부의 영향을 전혀 받지않는 함수이다.

  • 함수 자체가 독립적이며 Side-Effect가 없다
  • Thread에 안정성을 보장받아 병렬 처리를 동기화 없이 진행할 수 있다.

비상태와 불변성 (Immutablility)

외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경하지 않는 것이다. 함수에 인자로 전달된 데이터를 변경하는 것이 아니라 새로운 버전의 새로운 오브젝트를 만들어 결과값을 전달하며 절대 데이터를 변경하지 않는다.

  • 동시다발적인 멀티 쓰레딩 환경에서도 안정적으로 동작 가능하게 한다.

표현식 (Expressions)

함수형 프로그래밍에서는 if 나 switch, for과 같은 Statement가 아닌 표현식을 사용해야한다.

  • for로 배열을 하나씩 돌지 않고 map과 같은 함수를 사용한다.

합성 함수 (Function composition)

합성 함수란 새로운 함수를 만들어거나 계산하기 위해 둘 이상의 함수를 조합하는 과정을 말한다. 함수형 프로그램은 여러 작은 순수 함수들로 이루어져있기 때문에 이 함수들을 연쇄적으로 또는 병렬로 호출해서 더 큰 함수를 만드는 과정으로 전체 프로그램을 구축해야 한다.

반복문 대신에 map과 filter, reduce, all, any, find 등을 사용
명령형으로 작성하지 말고 선언형으로 작성한다
파이프라인을 사용한다

장단점

장점

  • 부작용이 적다 (Side Effect가 없다).
  • 외부에 있는 데이터에 의존하지 않으며 데이터를 변경하지 않는다.
  • 표현력이 좋고 가독성이 좋다.
  • 재사용성과 조합성이 좋다.

단점

  • 반복을 for문이 아닌 재귀를 통해 이뤄지는데,(=deep copy) 재귀적 코드 스타일은 무한루프에 빠질 수 있다.
  • 수학과 연관이 있기 때문에 배우는 데 시간이 오래 걸리고 어렵다.
  • 순수함수를 조합하는 것이 쉽지 않다.
profile
좋은 개발자가 되기 위해
post-custom-banner

0개의 댓글