-
함수로 데이터를 조작하는 것과, 데이터를 조작할 함수들을 배치하는 것의 차이Elixir 프로그래밍 2019. 7. 26. 10:51
흔히들 함수형 언어는 , 그 출발이 람다(Lambda) 연산이라 합니다.
람다 연산은 데이터들에 함수를 적용하는 것이라 할 수 있습니다.
아래의 두 코드를 비교해 보죠. 두 코드 모두 array에 있는 값들을 2배씩 증가시키는 코드입니다.
c code 예제
elixir code 예제
두 코드를 비교해 보면,
c의 코드는 "데이터에 조작을 가하는 코드 (또는 함수를) 작성한다"라고 볼 수 있습니다.
이에 반해,
Elixir는 , "데이터에 적용할 함수를 배치한다" 라 할 수 있습니다.
간단한 코드라 별 차이가 없어 보이지만, 실무에 적용하면 이 둘의 차이는 엄청나 집니다.
C의 코드는 Side Effect 가 생기게 됩니다. 만일 두 개 이상의 Thread가 동시에 같은 코드를 실행한다면, 당연히 문제가 생깁니다.
즉 위의 코드에서 array가 복수개의 thread가 동시에 사용해야 할 부분이라 이에 대한 side effect가 생기게 됩니다.
반면, Elixir의 경우 Data Share 가 없기 때문에 side effect 가 전혀 발생되지 않습니다.
이는 Elixir 가 원래 분산, 동시성 시스템을 개발하기 위한 목적으로 만들어져 있고, 그런 이유에서 이런 속성을 가지는 함수형 언어를 선택한 것으로 생각해 볼 수 있습니다.
단순한 Single Thread로 개발하며, 분산 시스템이 아닌 경우에는 C 나 Elixir나 거의 차이가 없습니다. 하지만, 병렬 처리가 되면서 분산 처리가 되어야 하는 시스템으로 가면, 그 복잡도나 코드 수행의 예측에서 많은 차이가 나게 됩니다.
어찌 보면, 함수형 언어는
- 입력받은 데이터들을 원하는 데이터로 조작(변형)을 하기 위하여
- 데이터들에게 어떤 함수들을 적용(배치) 할 것인가 "를 작성하는 과정으로 프로그램이 개발됩니다.
데이터를 조작하는 함수들이 라이브러리로 제공된다면, 그 함수를 사용하면 되고, 제공되는 함수가 없다면 내가 만들면 됩니다.
이들 함수는 "입력 데이터에 어떤 조작을 해서 어떤 결과 데이터를 만든다."로 볼 수 있습니다.
그래서, 함수형 언어인 Elixir 에는
- class 가 없습니다.
- class가 없으니 상속도, polymorphism 도 없습니다. ) => 모든 자료는 기본형, list, tuple, map으로만 표현합니다. (JSON으로 모든 데이터의 종류를 표현할 수 있는 것과 유사하다 생각할 수 있습니다. )
그러니, 언어에서 배워야 할 사항이 적어집니다.
- Critical Section 이 없습니다.
그러니 , 동시성의 처리가 편해지게 됩니다. 또한 분산 환경의 구성이 용이해집니다.
결과적으로 함수영 언어를 이용하면, Side Effect 가 없는 좀 더 예측 가능한 코드가 되면, 코드 양이 줄어들고, 동시성을 구현하기 용이해집니다. Object가 없으므로, Object 관련 언어 사항을 배울 필요가 없으므로 습득도 빨라집니다.
위의 적은 내용을 생각하시면서,
아래의 글을 다시 한번 읽어보시죠...
'Elixir 프로그래밍' 카테고리의 다른 글
함수와 함수의 입출력 (0) 2019.07.27 Elixir 의 데이터 형(Type) (0) 2019.07.26 함수형 언어 : 함수와 데이터 (0) 2019.07.02 EDPS(컴퓨터) 와 함수 (1) 2019.07.02 함수형 프로그래밍 언어 : Elixir (3) 2019.07.02