1. 함수형 프로그래밍
함수형 프로그래밍(Function Programming)은 작은 문제를 해결할 수 있는 순수 함수(Pure Function)들을 조합하여 재사용성과 유지보수성을 높이는 프로그래밍 패러다임이다.
순수 함수의 대표적인 특징은 다음과 같다.
1. Deterministic
: 동일한 입력이 주어지면 항상 동일한 결과를 반환한다.
2. No Side Effects
: 프로그램의 실행 과정에서 전역 변수, 데이터베이스, 파일 시스템, UI, 네트워크 요청 등의 외부 상태를 변경하거나 의존하지 않아야 한다.
/* Side Effects가 있는 함수 (Impure Function) */
let total = 0;
function addToTotal(value) {
total += value; // 외부 변수 total을 변경함 (Side Effect 발생)
return total;
}
/* Side Effects가 없는 함수 (Pure Function) */
function add(a, b) {
return a + b;
}
const multiply = (a, b) => a * b;
그렇다면, 이 순수 함수를 더 유연하게 재사용이 가능하도록 만들려면 어떻게 해야 할까?
2. Closure & Currying
자바스크립트는 함수도 value 로 여긴다. 즉, 함수의 리턴값을 함수로 하거나 함수의 인자값으로 함수를 받을 수 있다.
고차 함수(Higher-order Function): 함수를 인자로 받거나 반환하는 함수 활용
이런 고차함수의 특징을 활용한 방법으로 클로저와 커링이 있다.
//Closure
const addTo = x => y => x + y
var addToTen = addTo(10)
addToTen(3) // 13 -- 10을 기억했다가 추가인자 3과 덧셈 진행
//Currying
const sum = (a, b) => a + b
const curriedSum = (a) => (b) => a + b // 다중인자를 단일인자로 변환
curriedSum(30)(1) // 31
const add5 = curriedSum(5)
add5(12) // 17
Closure (클로저) | Currying (커링) | |
목적 | 내부 함수가 외부 함수의 변수를 기억하고 사용 | 여러 개의 인수를 하나씩 받는 함수로 변환 |
핵심 개념 | 함수가 선언될 때 외부 변수 값을 기억함 | 함수를 계속 리턴하여 한 번에 하나의 인수만 받음 |
예제 코드 | const addTo = x => y => x + y; | const curriedSum = (a) => (b) => a + b; |
사용 사례 | 비공개 변수 유지, 데이터 캡슐화 | 재사용성 증가, 부분 적용 가능 |
즉,
클로저: 외부 함수의 변수에 접근할 수 있는 내부 함수
커링: 다중 인수를 받는 함수를 하나의 인수만 받는 여러 개의 함수로 변환하는 기법.
커링은 함수를 여러 단계로 나누어, 각 단계에서 새로운 함수를 반환하는 방식인데, 이 과정에서 클로저가 활용된다.
3. 함수 조합(Function Composition)
고차 함수(Higher-order Function)는 함수를 인자로 받거나 반환하는 함수라고 했다.
함수가 value 면, 함수의 인자로 함수를 넣을 수도 있지 않을까?
함수 조합(Composing)은 이런 특징을 활용해 여러 개의 작은 함수를 결합하여 더 복잡한 함수를 만드는 기법이다.
즉, 여러 개의 함수를 순차적으로 실행하여 하나의 새로운 함수를 만드는 것이다.
//Composing
const compose = (f, g) => (a) => f(g(a));
const add1 = (num) => num + 1;
const add5 = (num) => num + 5;
compose(add1, add5)(10) // 16
함수형 프로그래밍.. 말은 많이 들어봤는데, 막상 접하고 나니 이런식으로 생각해본 적이 없어서 새로운 세상을 엿본 것 같다.
가독성은 모르겠지만 효율은 좋은 것 같다.
이런 방식의 프로그래밍에 익숙해진다면.......
정말 좋을지도...
더 자세히 알고싶다면..
7.3. 함수형 프로그래밍 활용
함수형 프로그래밍은 단순히 순수 함수, 불변성, 그리고 일급/고차 함수의 개념에 그치지 않고, 실제 문제 해결 및 시스템 설계에 응용될 수 있는 다양한 기법들을 제공합니다. 이 …
wikidocs.net
클로저와 함께 알아보는 curring 함수
JavaScript의 클로저를 통해 currying 함수를 알아보자.
pozafly.github.io
1. 함수형 프로그래밍
함수형 프로그래밍(Function Programming)은 작은 문제를 해결할 수 있는 순수 함수(Pure Function)들을 조합하여 재사용성과 유지보수성을 높이는 프로그래밍 패러다임이다.
순수 함수의 대표적인 특징은 다음과 같다.
1. Deterministic
: 동일한 입력이 주어지면 항상 동일한 결과를 반환한다.
2. No Side Effects
: 프로그램의 실행 과정에서 전역 변수, 데이터베이스, 파일 시스템, UI, 네트워크 요청 등의 외부 상태를 변경하거나 의존하지 않아야 한다.
/* Side Effects가 있는 함수 (Impure Function) */
let total = 0;
function addToTotal(value) {
total += value; // 외부 변수 total을 변경함 (Side Effect 발생)
return total;
}
/* Side Effects가 없는 함수 (Pure Function) */
function add(a, b) {
return a + b;
}
const multiply = (a, b) => a * b;
그렇다면, 이 순수 함수를 더 유연하게 재사용이 가능하도록 만들려면 어떻게 해야 할까?
2. Closure & Currying
자바스크립트는 함수도 value 로 여긴다. 즉, 함수의 리턴값을 함수로 하거나 함수의 인자값으로 함수를 받을 수 있다.
고차 함수(Higher-order Function): 함수를 인자로 받거나 반환하는 함수 활용
이런 고차함수의 특징을 활용한 방법으로 클로저와 커링이 있다.
//Closure
const addTo = x => y => x + y
var addToTen = addTo(10)
addToTen(3) // 13 -- 10을 기억했다가 추가인자 3과 덧셈 진행
//Currying
const sum = (a, b) => a + b
const curriedSum = (a) => (b) => a + b // 다중인자를 단일인자로 변환
curriedSum(30)(1) // 31
const add5 = curriedSum(5)
add5(12) // 17
Closure (클로저) | Currying (커링) | |
목적 | 내부 함수가 외부 함수의 변수를 기억하고 사용 | 여러 개의 인수를 하나씩 받는 함수로 변환 |
핵심 개념 | 함수가 선언될 때 외부 변수 값을 기억함 | 함수를 계속 리턴하여 한 번에 하나의 인수만 받음 |
예제 코드 | const addTo = x => y => x + y; | const curriedSum = (a) => (b) => a + b; |
사용 사례 | 비공개 변수 유지, 데이터 캡슐화 | 재사용성 증가, 부분 적용 가능 |
즉,
클로저: 외부 함수의 변수에 접근할 수 있는 내부 함수
커링: 다중 인수를 받는 함수를 하나의 인수만 받는 여러 개의 함수로 변환하는 기법.
커링은 함수를 여러 단계로 나누어, 각 단계에서 새로운 함수를 반환하는 방식인데, 이 과정에서 클로저가 활용된다.
3. 함수 조합(Function Composition)
고차 함수(Higher-order Function)는 함수를 인자로 받거나 반환하는 함수라고 했다.
함수가 value 면, 함수의 인자로 함수를 넣을 수도 있지 않을까?
함수 조합(Composing)은 이런 특징을 활용해 여러 개의 작은 함수를 결합하여 더 복잡한 함수를 만드는 기법이다.
즉, 여러 개의 함수를 순차적으로 실행하여 하나의 새로운 함수를 만드는 것이다.
//Composing
const compose = (f, g) => (a) => f(g(a));
const add1 = (num) => num + 1;
const add5 = (num) => num + 5;
compose(add1, add5)(10) // 16
함수형 프로그래밍.. 말은 많이 들어봤는데, 막상 접하고 나니 이런식으로 생각해본 적이 없어서 새로운 세상을 엿본 것 같다.
가독성은 모르겠지만 효율은 좋은 것 같다.
이런 방식의 프로그래밍에 익숙해진다면.......
정말 좋을지도...
더 자세히 알고싶다면..
7.3. 함수형 프로그래밍 활용
함수형 프로그래밍은 단순히 순수 함수, 불변성, 그리고 일급/고차 함수의 개념에 그치지 않고, 실제 문제 해결 및 시스템 설계에 응용될 수 있는 다양한 기법들을 제공합니다. 이 …
wikidocs.net
클로저와 함께 알아보는 curring 함수
JavaScript의 클로저를 통해 currying 함수를 알아보자.
pozafly.github.io