함수형 프로그래밍

·2023년 1월 31일
0

개발 지식

목록 보기
19/96
post-thumbnail

함수형 프로그래밍에 대해 설명해주세요.

객체 지향, 절차 지향 등과 같은 문맥을 가진 하나의 프로그래밍 패러다임 중 하나로, 자료 처리를 수학적 함수의 계산으로 취급하고 상태 및 데이터의 변질을 멀리하는 것에 중점을 두고 있는 프로그래밍 방식이다.

왜 인기가 많아졌나요?

함수형 프로그래밍은 사실 엄청 옛날부터 있었다. 오늘날 들어서면서, AI, IoT, Big Data, 가상화폐 등 수 많은 데이터 가짓수를 활용한 처리가 필요하면서, 객체지향의 의존 문제와 데이터의 잘못된 변형 문제들이 도마위에 올랐다. 이러한 문제를 해결할 방안으로 대량의 데이터를 빠르게 계산하면서 안정적으로 처리하는데 특화된 함수형 프로그래밍 언어가 주목을 받기 시작한다.

함수형 프로그래밍의 특징을 말씀해주세요.

순수함수

함수형 프로그램의 기본 개념으로, 동일한 입력이 주어지면 항상 동일한 출력을 생성하는 함수를 말한다. 외부 상태나 데이터를 수정하지 않으며 값을 반환하는 것 외에는 외부와 상호작용하는 것이 없다.

순수 함수를 사용한 코드는 함수마다 독립적으로 프로세스가 진행되기 때문에 코드의 흐름의 이해와 테스트가 쉬워진다. 디버깅 및 유지 보수가 간편해지며, 데이터를 변질을 최소화 하기 때문에 프로그램 안정성에 긍정적인 영향을 미친다.

불변성

함수형 프로그래밍에서는 값이 생성되는 경우 수정을 할 수 없다. 대신 변경 사항을 나타내기 위해 새로운 값을 생성해야 한다. 이는 데이터 수정, 삭제를 가능하게 하는 기존의 프로그래밍 패러다임과는 상당히 큰 차이를 가지고 있다. 데이터 자체에 불변성을 강조하여 데이터 변화에서 발생하는 복잡성을 피하고, 예기치 못한 상태변화가 일어나지 않도록 보장한다.

일급함수

어떠한 언어에서 함수 자체가 숫자, 문자열, 불리언과 같이 다른 데이터 유형과 동일한 타입의 상태를 지닌 경우, 일급 함수라고 표현한다.

일급함수는 다음과 같은 특징을 지니고 있다.

  • 함수를 변수에 할당할 수 있다.
  • 함수를 다른 함수의 인자로 제공할 수 있다. - callback 함수
  • 함수가 함수를 반환하는 것이 가능하다. - curry 함수

고차 함수 higher order function
일급 함수의 기능 가운데, 함수의 인자로 함수를 받거나, 함수가 함수를 반환하는 것이 가능한 함수를 말한다. 고차함수는, 일급함수에 내재된 유형이라고 할 수 있다. 모든 고차함수는 일급 함수라고 할 수 있지만, 모든 일급 함수를 고차함수라고 할 수는 없다.

일급객체

  • 객체를 변수에 할당하는 것이 가능하다.
  • 객체를 다른 함수의 인자로 제공할 수 있다.
  • 객체를 함수로 리턴 값으로 반환하는 것이 가능하다.

자바스크립트의 함수는 일급객체라고 해야하는가? 일급함수라고 해야하는가?
자바스크립트에서 함수는 객체로 표현된다. 그렇다면 자바스크립트의 함수는 일급 객체라고 하는 것이 옳은가? 일급 함수라고 하는 것이 옳은가? 여러 내용의 블로그를 탐색한 결과, 둘 다 맞다고 할 수 있다. 자바스크립트 함수는 두 본질을 모두 설명되는 것이 가능하다. 일급 함수로서 함수의 특징을 강조할 수도 있고, 일급 객체로서 속성과 메서드를 가진 객체이기도 하다.
단, 일급 함수, 일급 객체라는 개념은 동작에 초점을 맞춘 프로그래밍 패러다임을 설명하는 것이므로, 굳이 이 둘중에 뭐가 맞는지를 고민하기 보다는 자바스크립트 함수는 해당 개념의 특징이 반영되는 구나 라는 것에 초점을 두는 것이 맞는 거 같다.

자바스크립트에서 함수형 프로그래밍 적용하기

  • if문, 반복문 사용을 지양한다.
    • if 문은 boolean 을 반환하는 함수를 사용하자.
    • for 문은 map, filter , reduce 등의 내장 메서드를 통해 기존 데이터를 참조하여 새로운 결과값을 반환하게 하는 것이 가능하다.
    • 함수로 대체하면서 재사용이 가능하고, 해당 함수가 무슨 동작을 하는 지 쉽게 파악이 가능해진다.
  • 메서드 체이닝, 화살표 커링 혹은 재귀 활용하기

꼭 함수형 프로그래밍을 사용해야 하는가
그것은 아니다. 실제 프로젝트를 만드는 경우, React 의 state 와 같이 이벤트에 따라 화면단을 변화시키는 데 있어 상태 값이 필요하기 때문에 100% 모든 코드를 함수형 프로그래밍으로 작업하는 것은 실제 어려울 것이다. 객체지향, 절차지향, 함수형 프로그래밍은 코드를 설계하는 하나의 패러다임 방식이며, 이 중 반드시 한가지만 정해서 사용해야 한다는 개념은 절대 아니다.

참고
함수형프로그래밍이 대세다?! (함수형 vs 객체지향)
[JS] 자바스크립트 함수형 프로그래밍(인프런) 정리 (STEP 49)
[JavaScript] 고차 함수와 콜백(Callback) - 일급 객체란? - 하나몬
[함수형 프로그래밍] if문과 for문
[함수형 프로그래밍] 일급 함수와, 고차 함수
일급 함수 - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글