함수형 언어

08.Algorithm 2020. 6. 1. 15:32
728x90
반응형

함수형 프로그래밍 언어를 사용하면 코드를 간결하게 작성할 수 있어 개발 시간을 단축할 수 있고, 함수형 프로그래밍 언어가 부작용(Side Effect)를 허용하지 않는 순수 함수(Pure Function)를 지향하여 동시에 여러 스레드에서 문제 없이 동작하는 프로그램을 쉽게 작성할 수 있기 때문입니다. 저희의 선택은 Clojure였습니다.

 

함수형 프로그래밍 언어의 특징

 

 불변성(Immutability) :

 

- 변경 가능한 상태를 최대한 제거하려고 노력한 프로그래밍 언어.

- 함수 내부에 상태가 존재하지 않으며, 함수의 출력 값은 항상 함수의 입력 값의 영향만 받기 때문

-  프로그램을 구성하는 모듈들이 오로지 입력 값의 영향만 받기 때문에 테스트 코드를 작성하기 쉽고, 프로그래머가 예측하지 못하는 시점에 변경될 수 있는 내부 상태가 없기 때문에 프로그램이 예측 가능

- 최적화:  이전에 계산한 함수의 값을 캐싱(caching)해 두었다가 필요할 때 다시 사용하는 메모이제이션(memoization)은 함수의 불변성이 보장되지 않으면 불가능

-  변경 가능한 상태를 원천적으로 배제하기 때문에 프로그래머는 잠금(Lock)과 동기화(Synchronize)와 같은 골치 아픈 스레드 관련 문제에서 벗어나 핵심 로직 구현에 집중

 

-  변수에 할당할 수 있고, 다른 함수의 인자로 전달할 수 있으며, 다른 함수의 결과 값으로 반환될 수 있는 함수

-  함수를 하나의 값처럼 다룰 수 있기 때문에 객체지향 패러다임에서 클래스를 재사용하는 것처럼 함수를 재사용할 수 있고, 핵심 코드를 boilerplate 없이 간단하게 표현가능

-  인수로 전달된 함수를 이용하여 만든 새로운 함수인  고차 함수(Higher-order function)의 표현을 가능

 

 

-  어떤 값이 실제로 쓰이기 전까지 그 값의 계산을 최대한 미루는 지연 연산(lazy evaluation)을 지원

-  값을 미리 계산하여 저장하지 않기 때문에 공간을 절약할 수 있고, 값이 꼭 필요할 때만 계산하기 때문에 프로그램의 성능에도 긍정적인 영향

-  주로 메모이제이션과 함께 사용

 

 

https://engineering.linecorp.com/ko/blog/detail/244

 

728x90

'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
Posted by Mr. Slumber
,