ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수형 언어 : 함수와 데이터
    Elixir 프로그래밍 2019. 7. 2. 22:59

    스칼라, 하스켈, Swift , Java 8의 함수형 프로그래밍 지원, Python의 Lamdba,  모두 함수형 언어 또는 함수형 언어 개념을 가지고 있다고 합니다.  무언가 좋은 것이 있으니, 함수형 언어가 세상에 많이 나오고 있겠지요. 이 글은 함수형 언어에 대한 내용을 간략히 적겠습니다. 

     

     

    함수는 이미 프로그래밍에서 익숙한 개념입니다. 어떤 주어진 데이터에 대한 처리를 하여 그 결과를 생성하는 코드의 묶음 정도로 생각할 수 있을 것입니다.

     

    다른 프로그래밍 언어에도 있는 함수인데 왜 굳이 함수형 언어라고 할까요? 

     

    사실, C++ , Java 등의 OOP 언어는 중심이 Class 입니다.  실 세계를 Class로 모델링하고 이 Class는 사실 데이터와 이 데이터를 처리할 함수(메소드)의 묶음으므로 볼 수 있습니다. 그리고,  Class는 메소드를 호출함에 따라서 상태의 변이를 가지게 됩니다. 이 상태의 변이는 경우에 따라서 많은 문제를 발생시킬수 있습니다. 디버깅의 어려움, 동시성 처리의 어려움 등이 그 예입니다. 

     

    프로그램의 개발에 Class를 선언하고 Instance를 생성하고, Method 호출하고 꼭 이런 번거로운 단계를 거쳐야 할까요..?  재 사용성을 위한 상속, 상속에서 비롯되는 다형성이 꼭 필요한 것 일 가요..? 

     

    데이터와 데이터를 처리할 함수들만으로 개발을 할 수는 없을까요..?   아마 제 생각으로는 이런 출발점에서 함수형 언어가 만들어지지 않았나 합니다. 

     

    함수형 언어에는 객체(Object)가 없습니다. 대신 데이터와 데이터를 처리할 함수들만 존재합니다. 그리고 데이터는 거의 불변성(immuatable)을 가집니다. call-by-reference가 없다고 할 수 있습니다. 

     

    이것이 왜 좋을까요..? 

    함수형언어에서는 객체가 없으므로, stateless 또는 immutable의 형식으로 데이터를 처리 합니다.  쓰레드들 간의 lock 에 대한 문제가 없습니다. 그러므로 병렬처리에 아주 용이 합니다. 

     

    지금은 우선,  함수형 언어는 How 가 아니라 What의 방식으로 함수들의 조합으로 프로그램을 개발하는 방식이다. 정도로 기술하겠습니다. 

     

    Elixir에서는 이 함수형 언어의 개념을 동시성, 분산 구조 프로그램 개발에 아주 잘 적용하였습니다. 

    원래 Erison이 전자교환기 개발용 프로그래밍 언어로 만든 Erlang을 좀 더 쉽게 사용하고 발전시킨 Elixir이다 보니 동시성과 분산 구조 프로그램에 대한 고려가 아주 잘 되어 있고, 이들은 모두 함수와 프로세스라는 개념으로 구현됩니다. 

     

    이에 대한 설명은 차차 진행될 것이며, 사실 Elixir는 서버(특히, 백엔드서버)의 개발에 아주 탁월하며 분산 구조, 무정지 시스템을 개발하는 용도에 적합하며, 이 부분이 Elixir의 최대 장점이라고도 할 수 있습니다. 또한 , 개발기간의 단축, 간결한 코드, 코드의 유지보수 편이성 등도 장점으로 들 수 있습니다. 

     

     

    이번 글은, Java와 Elixir의 코드 비교로 OOP 프로그래밍 언어 와 함수형 프로그래밍 언어를 아주 잘 비교해 놓으신 글의 링크로 마치겠습니다. 

     

    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

     

     

     

     

     

     

Designed by Tistory.