함수형 프로그래밍 언어를 사용하면 코드를 간결하게 작성할 수 있어 개발 시간을 단축할 수 있고, 함수형 프로그래밍 언어가 부작용(Side Effect)를 허용하지 않는 순수 함수(Pure Function)를 지향하여 동시에 여러 스레드에서 문제 없이 동작하는 프로그램을 쉽게 작성할 수 있기 때문입니다. 저희의 선택은 Clojure였습니다.
함수형 프로그래밍 언어의 특징
- 변경 가능한 상태를 최대한 제거하려고 노력한 프로그래밍 언어.
- 함수 내부에 상태가 존재하지 않으며, 함수의 출력 값은 항상 함수의 입력 값의 영향만 받기 때문
- 프로그램을 구성하는 모듈들이 오로지 입력 값의 영향만 받기 때문에 테스트 코드를 작성하기 쉽고, 프로그래머가 예측하지 못하는 시점에 변경될 수 있는 내부 상태가 없기 때문에 프로그램이 예측 가능
- 최적화: 이전에 계산한 함수의 값을 캐싱(caching)해 두었다가 필요할 때 다시 사용하는 메모이제이션(memoization)은 함수의 불변성이 보장되지 않으면 불가능
- 변경 가능한 상태를 원천적으로 배제하기 때문에 프로그래머는 잠금(Lock)과 동기화(Synchronize)와 같은 골치 아픈 스레드 관련 문제에서 벗어나 핵심 로직 구현에 집중
- 변수에 할당할 수 있고, 다른 함수의 인자로 전달할 수 있으며, 다른 함수의 결과 값으로 반환될 수 있는 함수
- 함수를 하나의 값처럼 다룰 수 있기 때문에 객체지향 패러다임에서 클래스를 재사용하는 것처럼 함수를 재사용할 수 있고, 핵심 코드를 boilerplate 없이 간단하게 표현가능
- 인수로 전달된 함수를 이용하여 만든 새로운 함수인 고차 함수(Higher-order function)의 표현을 가능
- 어떤 값이 실제로 쓰이기 전까지 그 값의 계산을 최대한 미루는 지연 연산(lazy evaluation)을 지원
- 값을 미리 계산하여 저장하지 않기 때문에 공간을 절약할 수 있고, 값이 꼭 필요할 때만 계산하기 때문에 프로그램의 성능에도 긍정적인 영향
- 주로 메모이제이션과 함께 사용
https://engineering.linecorp.com/ko/blog/detail/244
'08.Algorithm' 카테고리의 다른 글
알파베타 가지치기 알고리즘 (0) | 2020.06.01 |
---|---|
이더리움 - 블룸 필터(Bloom filter) (0) | 2020.06.01 |
버블정렬 (Bubble Sort) (0) | 2020.06.01 |
스택 (Stack) (0) | 2020.06.01 |
알고리즘 평가 (0) | 2020.06.01 |