Link Search Menu Expand Document

함수형 프로그래밍(Functional Programming)

함수 단위의 조합으로 프로그램을 구성하는 방법이다.

OOP의 한계점

  • 함수의 비 일관성 : OOP에서 사용되는 함수는 동일한 입력에 대해서 다른 결과를 반환하는 경우가 있다.
    • 자동차의 위치를 반환하는 메소드의 경우 현재 위치에 의존하여 동작한다.
  • 객체 간 의존성 증가 : 객체 간 상호작용을 위해 함수가 다른 객체의 함수를 호출한다.
  • 객체 내 상태 변화 제어의 어려움 객체 내의 변수는 객체에서 제공하는 함수에 의해 변경된다.다수의 외부 경로를 통해서 객체 내에 함수가 변경된 경우 추적하는 것이 쉽지 않다.

함수형 프로그래밍의 특징

  • FP(Functional Programming)은 상태를 제어하기 보다는 상태를 없애고 목적에 집중하는 프로그래밍 패러다임이다.
  • 객체 단위로 문제를 분해하지 않고 함수들의 세트로 문제를 분해한다
  • 주어진 입력에 대하여 항상 같은 결과를 출력으로 내보낸다.
  • 함수를 값으로 취급한다.

함수형 프로그래밍의 3가치 원칙

  • 입출력이 순수해야한다. - 순수 함수(Pure Function)
  • Side Effect가 없어야 한다.
  • 함수와 데이터를 중점으로 생각한다.

함수형 프로그래밍의 장점

  • 함수의 수행 결과를 입력 값에만 의존하도록 설계하기 때문에 시스템의 불규칙한 상태 변화에 의한 예기치 못한 영향을 최소화 할 수 있다.
    • 버그, 외부 시스템 공격에도 쉽게 원인을 찾아 고칠수 있음을 의미
  • 멀티스레드 환경에서의 객체 내 상태 변화 제어의 어려움이 발생하지 않는 구조이다. 따라서 유지보수가 뛰어나다.

함수형 프로그래밍의 단점

  • 입출력 일관성을 위해 상태를 허용하지 않으므로 같은 기능의 구현을 위해 다양한 함수의 조합을 고안해야 한다.

순수한 함수(Pure function)

부작용(side-effect)이 없는 함수. 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 뜻한다. 따라서 순수한 함수는 Thread-safe하며, 병렬적인 계산이 가능하다.

y = f(x) * f(x); // f is Pure function

f가 pure function인 경우 y는 항상 결과 값이 같다.

y = random() * random();

이와 같이 pure function이 아닐 경우 y값이 항상 달라질 수 있는데, 이는 부작용을 발생시키는 함수이다.

익명 함수(Anonyous function)

이름이 없는 함수를 뜻한다.

[](int x) -> int { retrn x*x; }

고계 함수(higher-order function)

고차 함수는 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수를 말한다. 정수를 함수의 인자로 전달 할 수 있듯이 어떤 함수도 다른함수의 인수로 전달할 수 있다. 마찬가지로 함수의 결과 값으로 정수를 반환할 수 있듯이 함수를 반환할 수도 있다.

map(x-> x*x)[1..10]