어떤 것을 학습하기 이전에 학습하려는 기술이 왜 필요하며, 핵심이 뭔지, 왜 이것을 학습해야 하는지 알아야 학습 능률이 올라갑니다.
Inflearn 유인동 님의 강의 함수형 프로그래밍과 JavaScript ES6+ 를 학습하기에 앞서
왜 함수형 프로그래밍 학습에 앞서 함수형 프로그래밍이 무엇인지, 왜 필요한지, 특징은 뭔지 살펴봅시다.
🐳 함수형 프로그래밍이란 ?
함수형 프로그래밍이란? 계산을 수학적 함수의 평가로 취급하고, 상태 변경과 데이터의 변형을 피하는 프로그래밍 패러다임입니다.
함수형 프로그래밍이 추구하는 것은 예측 가능성을 높이고, 부작용을 최소화하며, 코드의 가독성과 유지보수성을 향상시키는 것입니다.
위의 목적을 달성하기 위해 함수들을 조합해 데이터를 다루는 프로그래밍 패러다임을 함수형 프로그래밍이라고 합니다.
🐳 함수형 프로그래밍의 핵심 특징
순수함수
순수함수란 동일한 입력에 대해 항상 동일한 출력을 제공하며, 외부 상태를 변경하지 않는 함수를 의미합니다.
함수형 프로그래밍은 예측 가능성과 부작용을 최소화 하는 것을 중요시 여깁니다.
그렇기 때문에 같은 같은 입력에 대해서 같은 결과가 나오는 순수함수 성질이 중요합니다.
불변성
불변성은 데이터가 변하지 않는 것을 의미합니다.
그렇다면 함수형 프로그래밍에서 데이터 변경이 필요한 경우는 어떻게 해야할까요 ?
그럴 때는 데이터를 변경하는 것이 아니라 입력 받은 데이터를 가공해 새로운 데이터를 만들어 냅니다.그런데 중요한 것은 왜 그렇게 해야 하냐는 것입니다.그것은 함수형 프로그래밍이 추구하는 것울 통해 알 수 있습니다.함수형 프로그래밍은 예측 가능성이 높고, 부작용을 최소화하기 위한 패러다임이기 때문입니다.
일급함수
자세한 내용은 블로그의 일급함수 포스팅을 참고해 주세요.
[Javascript] - [함수형프로그래밍] 1. 일급함수란 ?
JavaScript에서 일급이란 아래의 성질을 만족하는 객체를 의미한다.
- 변수에 담을 수 있다.
- 함수의 인자로 사용할 수 있다.
- 함수의 결과로 사용될 수 있다.
JavaScript에서는 함수 또한 하나의 객체이기 때문에 위의 성질을 만족시키는 함수를일급 함수라고 한다.
위의 일급의 성질을 읽어보면 다른 객체들과의 상호작용이 뛰어 나다는 것을 알 수 있다.일급함수는 이러한 성질을 이용하여 다른 함수들과의 다양한 조합을 통해 고차함수를 만들어 낼 수 있게 해준다 !
그래서 일급객체, 일급함수가 무엇인지 배우는 것이다.
고차함수
고차함수란 함수를 인자로 받거나 함수를 결과로 반환하는 함수를 의미한다.
함수를 인자로 받거나 결과로 반환하는 함수
워딩이 익숙하지 않은가? 위에서 봤던 일급함수들의 성질이다.
고차함수는 일급함수들을 조합하여 만든 결과 또는 함수를 반환하는 새로운 함수를 의미한다.
이러한 고차함수들을 통해 코드의 재사용성을 높이고 추상화 수준을 높일 수 있다.
이터러블 처리 연산 ( Map, Reduce, Filter )
JavaScript에서는 이터러블/이터레이터 프로토콜을 따르는 순환 가능한 객체들을 함수형 프로그래밍으로 다루게 된다.
( 이터러블 이터레이터 프로토콜이 궁금하시다면 이 포스팅을 참고해 주세요. )
이러한 이터러블한 객체를 다루기 위한 기본적인 방법이 Map, Reduce, Filter 이다.( 단순 배열이 아니라 이터러블한 모든 객체에 사용이 가능하다 ! )
이 기본 방법들을 익히면 고차함수를 쉽게 다룰 수 있기 때문에 가장 근간이 되는 Map, Reduce, Filter를 배우게 된다.또한 고차함수들도 Map 계열, Reduce 계열, Filter 계열이라는 표현을 쓸 정도로 하나의 카테고리이기도 하다 !
🐳 정리
위의 함수형 프로그래밍의 특징들을 알고 나면 Inflearn 유인동 님의 강의 함수형 프로그래밍과 JavaScript ES6+ 를 학습할 때 학습 효과가 더 상승 될 것입니다 !
공부하기에 앞서 내가 왜 배우며 배우는 것들이 무엇을 위해 사용되는지 등 학습에 대한 메타데이터가 있을 때 학습의 능률도 오르는 것일테니까요 !
함수형 프로그래밍을 학습하시는 모든 분들 , 그리고 강의를 들으시는 모든 분들에게 조금이나마 도움이 되었길 바랍니다 !
'Node.js > Javascript' 카테고리의 다른 글
[함수형프로그래밍] 3. Reduce 함수 ( with Test ) (2) | 2024.04.01 |
---|---|
[함수형프로그래밍] 2. 이터러블 이터레이터 프로토콜 근데 이제 range 함수 예제를 곁들인 (27) | 2024.03.26 |
[함수형프로그래밍] 1. 일급함수란 ? (0) | 2024.03.12 |
[Javascript] 날짜 구하기 / 문자열 앞에 문자 더하기 (0) | 2023.06.04 |