ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수로 데이터를 조작하는 것과, 데이터를 조작할 함수들을 배치하는 것의 차이
    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 관련 언어 사항을 배울 필요가 없으므로 습득도 빨라집니다. 

     

     

     

    위의 적은 내용을 생각하시면서,  

    아래의 글을 다시 한번 읽어보시죠...

    https://medium.com/@originerd/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8%EA%B8%B0-14ce8f98e34e

    '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
Designed by Tistory.