함수형 프로그래밍의 시작: Ramda 활용하기
JavaScript에서 함수형 프로그래밍을 쉽게 접근할 수 있도록 도와주는 Ramda 라이브러리를 소개합니다. 이 글에서는 함수형 프로그래밍의 기본 개념과 함께 Ramda를 활용하는 방법을 설명합니다.
Ramda
Ramda는 JavaScript에서 함수형 프로그래밍을 위한 강력하고 깔끔한 도구를 제공하는 라이브러리입니다. 이 라이브러리는 다양한 함수형 프로그래밍 기법을 지원하며, 코드를 간결하게 유지할 수 있게 도와줍니다.
함수
함수형 프로그래밍은 함수를 중심으로 이루어집니다. 함수는 재사용 가능한 코드 조각으로, 입력 값을 받아 결과를 반환합니다.
다음은 간단한 JavaScript 함수 예제입니다:
간단한 함수
function 두배(x) {
return x * 2;
}
ES6 화살표 함수를 사용하면 더 간결하게 작성할 수 있습니다:
간단한 ES6 화살표 함수
const 두배 = x => x * 2;
순수 함수
함수형 프로그래밍에서 중요한 개념 중 하나는 '순수 함수'입니다. 순수 함수는 부작용(side-effect)이 없는 함수로, 외부 변수를 변경하거나 데이터베이스에 접근하지 않습니다.
예를 들어, 동일한 입력 값에 대해 항상 동일한 결과를 반환해야 합니다.
불변성
함수형 프로그래밍에서 또 다른 중요한 개념은 '불변성'입니다. 불변성이란 값이나 객체가 한 번 초기화된 후에는 변경되지 않는 것을 의미합니다.
값이나 객체를 변경해야 할 때는 새로운 복사본을 만들어 변경 사항을 적용합니다. 이는 순수 함수와 잘 어울리며, 외부 데이터 구조를 변경하지 않도록 강제합니다.
시작하기
함수형 프로그래밍을 시작하는 가장 쉬운 방법은 반복문을 컬렉션 반복 함수로 대체하는 것입니다.
forEach
명시적인 반복문 대신 forEach 함수를 사용해보세요:
forEach
// 다음 코드:
for (let 값 of 배열) {
console.log(값);
}
// 이렇게 바꿔보세요:
forEach(값 => console.log(값), 배열);
forEach는 배열의 각 요소에 대해 주어진 함수를 호출합니다.
map
다음으로 중요한 함수는 map입니다. map은 배열의 각 요소에 함수를 적용하고 결과를 새로운 배열로 반환합니다:
map
map(x => x * 2, [1, 2, 3]); // --> [2, 4, 6]
이름 있는 함수도 사용 가능합니다:
map with named function
const 두배 = x => x * 2;
map(두배, [1, 2, 3]);
filter/reject
filter는 주어진 함수를 통해 배열의 요소를 선택합니다:
filter
const 짝수 = x => x % 2 === 0;
filter(짝수, [1, 2, 3, 4]); // --> [2, 4]
반대로 reject는 함수가 거짓을 반환하는 요소만 선택합니다:
reject
reject(짝수, [1, 2, 3, 4]); // --> [1, 3]
find
find는 주어진 함수를 만족하는 첫 번째 요소를 반환합니다:
find
find(짝수, [1, 2, 3, 4]); // --> 2
reduce
reduce는 조금 더 복잡한 함수로, 누적 값을 계산할 때 사용됩니다:
reduce
const 더하기 = (누적값, 값) => 누적값 + 값;
reduce(더하기, 5, [1, 2, 3, 4]); // --> 15
reduce는 처음에 초기값(5)과 배열의 첫 번째 요소(1)를 더합니다. (5 + 1 = 6)- 그 다음 누적값(
6)과 다음 값(2)을 더합니다. (6 + 2 = 8) - 이 과정을 계속하여 마지막 값(
4)까지 더합니다. - 최종적으로
15를 반환합니다.