[TIL] 함수형 프로그래밍

김은혁·2022년 2월 7일
0
post-custom-banner

함수형 프로그래밍

함수형 프로그래밍은 깔끔하고 유지보수가 용이한 소프트웨어를 만들기 위해 최대한 효과적으로 함수를 사용하는 프로그래밍 방식을 의미한다. 함수형 프로그래밍은 자료처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다.

함수형 프로그래밍을 구현하기 위해서는 아래와 같은 개념들을 알 필요가 있다.

순수함수 (Pure function)

순수함수란 결과가 오로지 입력 매개변수에 의해서만 좌우되며 아무런 부작용을 일으키지 않는, 즉 반환값 이외의 외부 영향이 없는 함수이다.

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

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

위의 코드는 add라는 함수 안에서 전역변수 num을 참조하기 때문에 순수함수가 아니다.

function add(a, b) {
    return a+b;
}
const result = add(2, 3);

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

순수함수는 프로그램의 변화 없이 입력값에 대한 결과를 예상할 수 있어 테스트가 용이하다.

불변성 (Immutablility)

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

let onetwo = { one: 1, two: 2 };

function func(obj) {
    obj.one = obj.one + 1;
    return obj;
}

위의 코드는 전역으로 선언된 객체의 속성을 변경하므로 불변성을 지키지 못 한다.

let onetwo = { one: 1, two: 2 };

function func(obj) {
    return {...obj, one: obj.one + 1};
}

일급 객체

  • 변수나 데이터 구조 안에 담을 수 있다
  • 파라미터로 전달할 수 있다
  • 반환값으로 사용할 수 있다
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다
  • 동적으로 프로퍼티 할당이 가능하다

일급 함수는 독립적으로 취급이 가능한 '물자체(thing in itself)' 함수이다. 일급 함수를 기술하는 방법으로는 데이터형 함수가 있다. 다른 데이터처럼 함수를 변수에 할당할 수 있다는 의미다. 자바스크립트에서 함수는 객체이므로 일급 함수로 불린다.

고차함수

함수를 인수로 받거나 함수를 반환하는 함수를 고차함수라고 한다.

  • 함수를 인자로서 전달할 수 있어야 한다
  • 함수의 반환값으로 또 다른 함수를 사용할 수 있다
const addInform = (name) => (age) => age + name;
const name = addInform('은혁');

console.log(name('97')); // 97은혁

장단점

장점

  1. 높은 수준의 추상화를 제공한다
  2. 함수 단위의 코드 재사용이 수월하다
  3. 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다

단점

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

0개의 댓글