요약
함수형 프로그래밍은 부수효과를 최소화하고 순수 함수를 조합하여 문제를 해결하는 패러다임
일급 함수는 프로그래밍 언어가 함수를 일급 객체처럼 취급하는 것으로 변수에 할당하거나 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있다.
프로그래밍 패러다임
프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다.
새로운 프로그래밍 패러다임을 통해 새로운 방식으로 생각하는 법을 배우고, 이를 바탕으로 코드를 작성하게 된다.
대표적인 프로그래밍 패러다임
- 명령형 프로그래밍
- 절차지향 프로그래밍
- 객체지향 프로그래밍
- 선언형 프로그래밍
- 함수형 프로그래밍: 순수 함수를 조합하여 프로그래밍 하는 방식
함수형 프로그래밍
부수효과를 최소화하고 순수 함수를 조합하여 문제를 해결하는 패러다임
작은 문제를 해결하더라도 함수를 구현하며 이러한 프로그래밍 방식은 가독성을 높이고 유지보수를 용이하게 한다.
함수형 프로그래밍은 변수의 값을 변경하는 대신, 새로운 값을 계산하기 위해 함수를 사용한다.
이러한 함수들은 입력값에 대해 항상 동일한 값을 반환하며, 외부 상태에 영향을 주지 않는다.
대입문을 사용하지 않기 때문에 한 번 생성한 데이터는 변경되지 않는다(불변성).
다른 표현으로는 “대입문이 없는 프로그래밍” 이라고도 불린다.
명령형 프로그래밍과 함수형 프로그래밍 예시
// 명령형 프로그래밍 for(let i = 0; i < 10; i++) { console.log(i); } // 함수형 프로그래밍 function printNumbers(n, callback) { for (let i = 0; i < n; i++) { callback(i); } } printNumbers(10, console.log);
함수형 프로그래밍의 특징
부수 효과가 없는 순수 함수를 일급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.
부수효과(Side Effect)
함수 외부의 상태에 영향을 만드는 것
값을 반환하는 것 외에 부수적으로 어떤 효과를 발생시키는 것을 의미한다.
- 변수나 상태를 바꾸거나 수정
- 콘솔 또는 파일 I/O 발생
- 예외나 오류가 발생하며 실행이 중단됨
- 다른 부수효과가 있는 함수나 상태 값에 의존
순수 함수(Pure Function)
함수형 프로그래밍의 구조를 이루는 작은 단위
- 주어진 입력에 대하여 계산하고 반환만 하는 함수
- 같은 매개 변수에 대해 같은 값을 반환한다.
- 부수효과가 없다.
일급 객체(First-Class Object)
함수형 프로그래밍에서 함수를 취급하는 형태
- 변수나 데이터 구조 안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값으로 사용할 수 있다.
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.
참조 투명성(Referential Transparency)
동일한 입력에 대해 항상 동일한 결과를 반환
함수의 호출 자체가 결과값으로 치환된다.
일급 함수
프로그래밍 언어가 함수를 일급 객체로 취급하는 것
일급 객체의 특징을 모두 가진 함수를 일급 함수라고 표현한다.
JavaScript, Python 등 많은 프로그래밍 언어가 일급 함수를 지원한다.