[함수형 프로그래밍] 함수형 프로그래밍의 개념

임수현·2022년 8월 15일
0

함수형 프로그래밍이란 하나의 프로그래밍 패러다임으로, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변데이터를 멀리하는 프로그래밍 패러다임을 의미한다.

함수형 프로그래밍을 한 줄로 요약하자면 다음과 같다.

부수효과가 없는 순수함수를 1급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.

여기서 말하는 부수효과란 다음과 같은 변화 또는 변화가 발생하는 작업을 의미한다.

부수효과

  • 변수의 값이 변경됨
  • 자료구조를 제자리에서 수정함
  • 객체의 필드값을 설정함
  • 예외나 오류가 발생하며 실행이 중단됨
  • 콘솔 또는 파일 I/O가 발생함

함수형 프로그래밍은 코드를 작성하는 과정에서 발생하는 부수효과를 최소화 함으로써. 예기치 못한 오류를 방지하고, 코드를 좀 더 직관적으로 만들어 주기 위해 활용하는 프로그래밍 패러다임이다.

다음은 함수형 프로그래밍을 이해하는데 필요한 개념들이다.

순수 함수

순수함수란 다음을 만족하는 함수를 의미한다.

  1. 같은 입력값이라면, 항상 같은 값을 반환한다.
  2. 부수효과를 가지지 않는다.

여기서 부수효과를 가지지 않는다는 의미는 함수의 내부에서 인자 값을 변화시키거나, 함수의 외부 요소에 영향을 주지 말아야 한다는 것을 의미한다.

합성 함수

합성 함수는 새로운 함수를 생성하거나 어떤 계산을 수행하기 위해 둘 이상의 함수를 결합하는 프로세스를 말한다.

참조 투명성

참조 투명성이란 함수를 실행하더라도 어떠한 상태의 변화 없이 항상 동일한 결과를 반환하여, 항상 동일하게(투명하게) 실행결과를 예측할 수 있다는 것을 의미한다.

불변성

immutable 객체는 생성된 이후에는 바꿀 수 없는 객체이다. 반대로 mutable 객체는 생성된 이후에도 바꿀 수 있는 객체이다.

불변성은 함수형 프로그래밍의 핵심 개념이다. 불변성이 지켜지지 않는다면, 프로그램의 데이터 흐름이 손실되고 이상한 버그가 발생할 수 있다.

자바스크립트에서는 이러한 불변성을 지키기 위해 Immutable.js와 같은 라이브러리를 활용하기도 한다.

1급 객체

1급 객체란 다음과 같은 것들이 가능한 객체를 의미한다.

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

고차 함수

고차함수란 함수를 인자로 받거나 반환하거나 둘 다 사용하는 모든 함수를 의미한다. 상위함수가 사용되는 경우는

  • 콜백 함수, promise 등을 사용하여 액션, 효과 또는 비동기 흐름 제어를 추상화하거나 격리할 때
  • 다양한 데이터 타입에 대해 작동할 수 있는 유틸리티 생성
  • 재사용이나 합성함수의 목적으로 함수를 부분적으로 인자에 적용하거나 커링함수 생성
  • 함수 리스트를 받고 그 함수들의 합성 함수를 반환해주는 함수

함수형 프로그래밍에서 반복문을 작성하는 방법

함수형 프로그래밍에서는 반복문을 for를 활용하지 않으며, 재귀적인 방식을 통해 구현한다.

profile
상상을 구현하고픈 프론트엔드 개발자입니다.

0개의 댓글