코드숨에서 4주동안 함수형 자바스크립트 책 스터디를 했다.
우리가 이번 스터디를 마치면, 알아야 할 개념들에 대해서
에 대해서 정리를 하면서 스터디를 진행했다.
함수형 프로그래밍이 사람들이 말하는 것들이 조금씩 달라서 정리하기가 굉장히 어려웠는데, 그러면 그럴수록 위와 같은 질문들이 도움이 됐다. 핵심적인 부분들을 골라내는 데 있어서 굉장히 유용했다. 예를들어 함수형 프로그래밍에 대해서 다음과 같이 정리했다.
## 함수형 프로그래밍이란 무엇일까?
* 순수함수로 프로그래밍을 하는 것
* 함수로 기능을 추상화해서 프로그래밍 하는 것
* 이미 입증된 함수로 새로운 함수로 만들어서 프로그래밍 하는 것
* 상태변이를 최소화하면서 프로그래밍하는 것
## 함수형 프로그래밍을 왜 해야할까?
* 복잡한 코드를 간결하게 분리할 수 있다.
* 선언적으로 할 수 있다.
* 테스트가 용이하다.
* 더 안전하게 프로그래밍할 수 있다.
* 순수한 순수하지 않은 부분을 명확하게 나눌 수 있다.
우리가 배운 것들을 그래서 어디다 써먹을 수 있을까? 이런 고민들을 굉장히 많이 해봤다. 내가 그냥 아무 생각 없이 작성한 함수들에 대해서 함수형으로 코드를 작성한다면 어떻게 될까? 이미 작성한 코드들에 대해서도 이 코드들을 함수형으로 작성한다면 어떻게 될까? 같은 고민을 많이 했다.
코드 리뷰를 하다가 이걸 Maybe
를 사용해서 문제를 해결하면 어떨까?하여 코드도 짜보고 코드 리뷰도 남겨봤다. 이렇게 적용했던 경험도 사람들에게 공유했다.
Either
에 대해서는 아직 이해를 못 해서 아쉬운데, 다시 공부해서 적용해봐야겠다.
어떻게 사용하는가는 사실 말로 설명하기에는 굉장히 어렵다. 그래서 예제를 만들어봤다. 예르들어 꼬리 호출 최적화가 되어 있지 않은 재귀 프로그램에 대해서 꼬리 호출 최적화를 해봤다.
// 재귀
const sum = (numbers) => {
if (numbers.isEmpty()) {
return 0;
}
// 1 + sum[2,3,4,5] => 스택에 넣어놓음
// 1 + 2 + sum[3,4,5] => 스택에 넣어놓음
return first(numbers) + sum(drop(numbers));
}
// 꼬리 재귀 => 반복문으로 변경 가능 => 반복문으로
const sum = (numbers, sum = 0) => {
if (numbers.isEmpty()) {
return sum;
}
// sum([2,3,4,5], 0 + 1)
// 스택이 2개 => 콜스택 터짐이 없다.
return sum(drop(numbers), sum + first(numbers));
}
예제를 만들 수 없다면 완벽하게 이해한 것이 아니다. 이러한 피드백을 통해 학습에 대한 척도를 정할 수 있어서 굉장히 좋았다. 내가 아직 함수형 사고를 완벽히 이해하지 못한 것 같다. 사람들이 쉽게 이해할 수 있는 예제를 만들 수 있어야 할 것 같다.
적용할 수 없을 것 같다. 진입장벽이 너무 높아서 팀원들이 모두 함수형 프로그래밍에 대해 학습하고 습득해야 하는데 실질적으로 적용하기는 어려울 것 같다. 함수형 프로그래밍 맛만 보는 정도로 그치는 것 같아 아쉽다.
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!