앞서 배웠던 함수형 프로그래밍의 개념을 잘 회고해 본 다음, 실제로 적용하는 연습을 해보도록 하겠습니다. 우선, 기본적으로 수열에서 배웠던 시그마 기호를 코드로 구현하는 과정을 살펴볼까요?
다음과 같이, 어떤 배열의 원소들을 모두 더하는 코드, 그리고 곱하는 코드를 구현한다고 가정해 봅시다. 함수의 이름은 각각 sum과 multiply로 정해보겠습니다. 그리고 각각의 함수를 기본적인 방식으로 구현해 봅시다.
function sum(arr) {
var len = arr.length;
var i = 0;
var sum = 0;
for(; i < len; i++){
sum += arr[i];
}
return sum;
}
var arr = [1, 2, 3, 4, 5];
console.log(sum(arr));
function multiply(arr) {
var len = arr.length;
var result = 1;
var i = 0;
for(; i < len; i++) {
result *= arr[i];
}
return result;
}
var arr = [1, 2, 3, 4, 5];
console.log(multiply(arr));
위와 같이 for 문을 활용하여 sum과 multiply 함수를 각각 정의해 보았습니다. 어렵지 않게 작성하고, 이해할 수 있는 함수인데 이러한 형태의 함수를 앞서 설명한 '명령형 프로그래밍' 방식으로 지칭할 수 있습니다. 만일 나누기, 빼기 등 다른 연산을 수행하려고 하면 각각의 함수를 새로 작성해야 합니다.
하지만, 예를 들어 사칙 연산에 해당하는 각각의 연산을 실행하는 함수를 만들어 놓고, 특정 함수에 해당 사칙 연산 함수를 대입하기만 하면 결과를 출력해 주는 형태의 함수를 만들어 모듈화 시키면 이는 곧 기본적인 형태의 함수형 프로그래밍이 됩니다.
우선, "어떤 숫자로 이루어진 배열이 있을 때, 해당 배열을 특정 함수(우리가 별도로 선언할 함수)에 대입해 실행하고 결과를 리턴하는" 함수를 정의해 보도록 합시다.
function calculate(func, arr, init) {
var len = arr.length;
var i = 0;
var accum = init;
for(; i < len; i++){
accum = func(accum, arr[i]);
}
return accum;
}
var sum = function(x, y) {
return x + y;
}
var multiply = function(x, y) {
return x * y;
}
var arr = [1, 2, 3, 4, 5];
var result1 = calculate(sum, arr, 0);
var result2 = calculate(multiply, arr, 1);
console.log(result1);
console.log(result2);
위의 예제에서 함수 calculate는 함수 func와 배열 arr, 그리고 init값을 인자로 받고 있습니다. 그리고 해당 함수를 for문으로 루프하여 실행하는 함수입니다. 여기에 더하기 / 곱하기 함수인 sum과 multiply를 선언하여 이를 인자로 전달해 실행해 원하는 결과를 산출하는 함수형 프로그래밍 방식을 적용하였습니다.
'Programming > Javascript' 카테고리의 다른 글
14. Javascript 함수형 프로그래밍(5) - 피보나치 수열 구현하기 (0) | 2023.02.03 |
---|---|
14. Javascript 함수형 프로그래밍(4) - 팩토리얼 구현하기 (0) | 2023.01.31 |
14. Javascript 함수형 프로그래밍(2) - 함수형 프로그래밍 기본 (0) | 2023.01.18 |
14. Javascript 함수형 프로그래밍(1) - 개념 (0) | 2023.01.16 |
13. Javascript 객체지향 프로그래밍(5) - subClass 구현하기 5 (0) | 2023.01.11 |