함수형 프로그램의 대표 사진

함수형 프로그래밍

프로그래밍의 여러 종류 중 하나이며, 함수(function)을 이용해 프로그래밍을 하는 것 입니다.

=> 함수로만 이수어진 프로그램이라고 생각하면 편할 것 같습니다.

 

함수형 프로그래밍의 특징

함수형 프로그램은 다음과 같은 특징을 가지고 있습니다.

  • 불변 데이터(Immutable Data)
  • 1급 함수(First-Class Function)
  • 순수 함수(Pure Function)

불변 데이터(Immutable Data)

함수형 프로그래밍을 가능하게 하는 요소 중 하나가 바로 Immutable Data입니다.
한번 정해진 값은 바뀌지 않습니다.
List를 하나 만들어 항목을 추가/삭제 할때 추가가 필요하면 추가항목이 입력 된 List를 만들고 삭제가 필요하면 삭제항목이 제거 된 List를 만드는 식입니다.
이러한 자료구조를 Persistent Data Structure라고 부릅니다.

1급 함수(First-Class Function)

  • 컴퓨터 과학자 Christopher Strachey가 만든 조어
  • 함수가 런타임에도 생성
  • 함수의 인자로 전달되고 함수의 결과로서 리턴되며, 변수에 할당
  • 함수도 데이터처럼 구성이 가능해짐(Composability)

자바에서는 메서드가 1급으로 처리되지 않기에, 메서드만 따로 생성하거나, 메서드 자체를 생성자나 변수나 파라미터등에 전달 할 수 없습니다.
반면 자바스크립트에서는 아래와 같은 코드가 가능합니다.

function someFunc(){ ... } otherFunc(someFunc) //함수 자체를 파라미터로 전달 가능 var a = someFunc; // 함수를 변수에 할당 가능

즉 자바스크립트에서는 함수를 1급으로 처리하고 있습니다

순수함수(Pure Function)

주어진 입력으로 계산하는 것 이외의 프로그램의 실행에 영향을 미치는 부수 효과(Side Effect)가 없는 함수를 순수 함수라고 합니다.
예를들면 count, length 함수는 임의 문자열이나 배열에 대해서 길이를 반환하며, 그 외의 일은 일어나지 않습니다.

Side Effect (부수효과)

입력받은 값의 결과를 돌려주는 것 이외의 다른 어떤 일을 수행하는것

- 변수를 수정 - 자료 구조를 제자리에서 수정 - 객체의 필드를 설정 - 예외(Exception)를 던지거나 오류를 내면서 실행 중단 - 콘솔에 출력하거나 사용자의 입력을 읽어들임 - 파일에 기록하거나 파일에서 읽어들임 - 화면에 출력

함수형 프로그래밍의 장점

  • 순수 함수들로 작성하면 모듈성이 증가
  • 모듈성으로 인해 생기는 장점
    • 검사(Test)가 쉬워짐
    • 재사용
    • 병렬화
    • 일반화
    • 분석이 쉬워짐
  • 버그가 생길 여지가 적다
  • 가독성과 유지 관리 편의성이 향상
  • 함수를 사용하기 때문에 반복되는 개발이 쉬워진다

왜 함수형 프로그래밍인가?

  • 멀티 코어가 기본이 되면서 ‘동시성’ 처리에 함수형 프로그래밍이 강점을 보임
  • 불변값을 주로 다루기 때문에 Side Effect가 적어 동시성 처리가 쉬워짐
  • 코드 이해하기 쉬움
  • 유지보수 쉬움

역시 글보다는 코딩하면서 배우는게 최고인 것 같습니다 :)

 

 

출처: https://blog.sonim1.com/113

 

+ Recent posts