함수형 프로그래밍이란?

kimhanna·2020년 12월 29일
0
  • 함수형 프로그래밍이란?
    • (꼬리 질문) 자바스크립트 클로저란?
    • (꼬리 질문) 자바스크립트 프로토타입이란?

1. 함수형 프로그래밍이란?

  • 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고,
    상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
  • 문이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다.
    (출처:위키백과)

Input이 같으면 Output이 일정한 순수함수로 코딩을 했기 때문에
예상하지 못한 Output이 나왔을 때 Input값만 점검하면 된다.
그 Input값 역시 다른 순수함수의 Output이라면, 그 순수함수를 확인해보면 된다.
전체의 코드를 모두 점검할 필요가 없다는 뜻이다.

즉, 개발을 어떻게 하면 효율적으로 잘 할 수 있을지에 대한 의문에서 출발했을 때,
"순수함수를 조합하여 프로그래밍해보니 좋더라!"
라는 결론때문에 "함수형 프로그래밍" 방법을 적용하라는 것이다.

(개발 기간과 비용을 단축하여 효율적인 개발을 할 수 있는 프로그래밍 방법)

함수형 프로그래밍의 특징

1) 순수함수(Pure function)

  • 동일한 입력에는 항상 같은 값을 반환해야 한다.
  • 함수의 출력(return)은 오로지 그 함수에 입력된 값(input)에만 의존한다.
  • 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
    (Self-contained되어야 한다, 즉, side effect가 없다.)
    • Side effect가 없다는 의미는 오로지 출력(return) 만 수행한다는 의미이다.

2) Function composition

  • 둘 이상의 함수를 조합하는 과정을 말한다.
  • 함수형 프로그램은 여러 작은 순수 함수들로 이루어져있기 때문에
    이 함수들을 연쇄적으로 또는 병렬로 호출해서 더 큰 함수를 만드는 과정으로
    전체 프로그램을 구축해야 한다.
    재사용이 가능한 순수 함수를 원하는 Output을 위해 서로 엮는 것이다.
    함수를 엮기 때문에 고차원함수(Higher-Order Functions)를 활용해야 한다.

고차원 함수(Higher-Order Functions)ex: filter(), map(),reduce()

  • 함수를 인자(argument)로 받는다.
  • 함수를 결과로 반환한다.
  • 함수형 프로그래밍에서는 함수가 1등급 객체(first-class object)이다.
  • 함수가 1등급 객체이므로, 함수는 고차원 함수를 구현할 수 있다.

1등급 객체(first-class object (citizen, type, entity, value로 표현되기도 한다.)

  • 자료구조에 저장된다.
  • 인자(argument)로 전달된다.
  • 결과로 반환한다.
  • 함수가 실행되는 동안 새로운 함수가 만들어질 수 있다.

객제지향 프로그래밍 vs 함수형 프로그래밍

명령형은 어떻게 풀어내는지(how to solve)에 집중하고,
선언형은 무엇을 풀어내는지(what to solve)에 집중한다.

예를 들어, 최종적인 목표가 '물을 마시기' 라고 해보자.

(명령형) 어떻게(how) 할 것인지를 설명

  • 자리에서 일어난다.

  • 부엌으로 이동한다.

  • 컵과 물을 찾는다.

  • 컵에 물을 부어 마신다.

    (선언형) 무엇(what)을 할 것인지를 설명

  • 물을 마셔보자.

☛👉 객체지향 프로그래밍 ➲ 상태 변화 ➲ Side effect 발생
☛👉 함수형 프로그래밍 ➲ 상태 변화 없음 ➲ Side effect 미발생

3) Immutability(불변성)

  • 순수함수는 예측된 input과 함께 실행된다.
  • Input이 변하면, 순수함수는 개발자가 예측하지 않은 다른 출력값을 만든다.
  • 즉, 다른 출력값은 다른 함수에도 영향을 미친다.

4) Function decoration

  • 순수함수를 재사용하다보면, 이미 만들어진 순수함수를 그대로 적용하기보다
    일부 개선하거나, 조금 다른 방향으로 수정해야 하는 상황이 발생할 수 있다.
    이 때 function decoration을 적용한다.
  • 직접적으로 순수 함수를 수정하진 않지만, 함수에 실행 시점이나 방식을 조율하는 것을 말한다.

참고사이트

profile
한 줄의 코드가 유저의 일상을 변화시키는 매력에 반해 프론트엔드 개발자가 되었습니다. 늘 배움의 자세로 유저를 위한 기술을 구현하겠습니다. 저는 함께 이뤄내는 결과의 가치를 믿습니다.

0개의 댓글