함수형 프로그래밍
포스트
취소

함수형 프로그래밍



함수형 프로그래밍이란?

하나의 프로그래밍 패러다임으로 정의되는 일련의 코드 접근 방식으로 자료 처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다. 함수형 프로그래밍은 코딩 중 오류의 소지가 있을 수 있는 변수의 사용을 지양하고 순수 함수를 사용한다.

1930년대 알론소 처치의 ‘람다 계산법’에서 시작되었으며 대표적인 함수형 프로그래밍 언어로는 스칼라, 클로저, 하스켈 등이 있다.

최근에는 자바스크립트, 코틀린, 파이썬 같은 언어에도 함수형 프로그래밍 문법이 추가되었다.



일반적은 프로그래밍 언어에서 함수가 특정 동작을 수행하는 역할을 하는 것과는 달리. 함수형 프로그래밍에서는 함수를 수행해도 함수 외부 값이 변경될 수 없다.



함수형 프로그래밍의 특징

### 1. 순수 함수(Pure function)

부작용(side effect)이 없는 함수이다.

동일한 입력에는 항상 같은 값을 반환하며 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 한다. == 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없어야 한다.

1
2
3
4
5
let num = 1;

function add(a) {
    return a + num;
}

위와 같은 예제는 add라는 함수 안에서 전역 변수 num을 참조하기 때문에 순수 함수라고 볼 수 없다.

1
2
3
4
5
6
7
//순수 함수

function add(a,b) {
    return a+b;
}

const result = add(2,3);

위와 같이 add의 함수가 프로그램 실행에 영향을 미치지 않고 입력 값에 대해서만 값의 변화가 있으므로 순수함수이다.



2. 불변성(Immutabillity)

함수형 프로그래밍에서 데이터는 변하지 않는 불변성을 유지해야 한다. 데이터의 변경이 필요한 경우 원본 데이터 구조를 변경하지 않고 복사본을 만들어서 일부를 변경하여 사용한다.



3. 1급 객체(1급 시민, First class Object / First class Citizen)

함수형 프로그래밍 패러다임을 따르고 있는 언어에서 함수는 1급 객체로 간주된다.

1급 객체의 조건

  1. 변수나 데이터에 할당할 수 있어야 한다.
  2. 객체의 인자로 넘길 수 있어야 한다.
  3. 객체의 리턴 값으로 리턴 할 수 있어야 한다.



4. 반응형 프로그래밍(Reactive Programming)

: 선언형 프로그래밍(declarative programing) 중 하나로, 함수형 프로그래밍 패러다임을 활용하는 것을 말한다. 반응형 프로그래밍은 기본적으로 모든 것을 스트림(stream)으로 본다. 스트림이란 시간 순서에 의해 전달된 값의 집합(collection)으로 볼 수 있으며 제공되는 함수형 메서드를 통해 데이터를 immutable하게 관리할 수 있다.

또 함수형으로 만들기 때문에, 하나의 함수는 그 역할 자체에 집중할 수 있다.



함수형 프로그래밍의 장/단점

장점

  • 높은 수준의 추상화를 제공한다.
  • 함수 단위의 코드 재사용이 수월하다.
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다.
  • Lambda및 Collection, Stream과 같은 API를 통해 보일러 플레이트를 제거하고, 내부에 직접적인 함수 호출을 통해 가독성을 높일 수 있다. 일을 위한 일들이 줄어들어 실제 구현할 로직에만 집중할 수 있게 된다.

단점

  • 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다.
  • 함수형 프로그래밍에서는 반복이 for문이 아는 재귀를 통해 이루어지는데, 재귀적 코드 스타일은 무한 루프에 빠질 수 있다.
  • 순수 함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다.




참고

함수형 프로그래밍이란?

1급 객체(First-class citizen) 란? with Kotlin

Reactive Programming

반응형 프로그래밍이 뭔가요?

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.