4. ⓒ NAVER Connect Foundation 4
1.1 키워드로 살펴보는 함수형 프로그래밍
01 02
선언형 프로그래밍
명령형 프로그래밍 vs 선언형 프로그래밍
순수함수
• 예측가능
• 참조 투명성
• 불변성
5. ⓒ NAVER Connect Foundation 5
1.2 명령형 프로그래밍이란?
명령형 프로그래밍이란?
컴퓨터가 수행할 프로그램을 순서대로 써놓은 것
무엇을 할 것인지 보다는 어떻게 동작하는가에 집중
6. ⓒ NAVER Connect Foundation 6
1.3 명령형 프로그래밍으로 만들어보는 집 찾아가기 프로그램
명령형 프로그래밍으로 집을 찾아가는 프로그램을 만든다면?
7. ⓒ NAVER Connect Foundation 7
1.4 선언형 프로그래밍이란?
선언형 프로그래밍이란?
컴퓨터가 무슨 동작을 할 지에 집중하여
어떻게 동작하는 지 보다 무엇을 할 것인가를 표현
8. ⓒ NAVER Connect Foundation 8
1.5 선언형 프로그래밍으로 만들어보는 집 찾아가기 프로그램
선언형으로 바꿔보자
9. ⓒ NAVER Connect Foundation 9
1.6 선언적으로 사용할 수 있게 함수를 만들려면 어떻게 해야할까? #순수함수
그렇다면..🤔
함수를 어떻게 만들어야할까?
10. ⓒ NAVER Connect Foundation 10
1.7 순수함수의 조건 #순수함수
함수의 인풋을 통한 아웃풋이 예측 가능해야 하지 않을까?
-> 예측 가능성
동일한 인풋은 동일한 아웃풋을 보장 해야 하지 않을까?
-> 참조 투명성
원본이 바뀌지 않는다는 보장이 있어야 하지 않을까?
-> 불변성
11. ⓒ NAVER Connect Foundation 11
1.8 그래서 순수함수란?
순수함수
예측 가능하며, 같은 인풋이면 같은 아웃풋을 반환하고,
원본이 바뀌지 않기 때문에 Side Effect가 없는 함수
12. ⓒ NAVER Connect Foundation 12
1.9 그래서 함수형 프로그래밍이란?
함수형 프로그래밍
선언형으로 함수의 결과가 무엇인지에 집중하고
순수함수들을 만들어 이들을 조합하며 기능을 구현하는 것
19. ⓒ NAVER Connect Foundation 19
3.2 pipe함수 만들어보기
예제 2-1 : pipe함수로 함수들을 조합한 함수를 만들어보자
20. ⓒ NAVER Connect Foundation 20
3.3 pipe함수 사용해보기
예제 2-2 : pipe함수 사용 예제
21. ⓒ NAVER Connect Foundation
CHAPTER 4.
동시성 프로그래밍
함수형 프로그래밍으로 동시성 프로그래밍의 어려움을 해결할 수 있지 않을까?
22. ⓒ NAVER Connect Foundation 22
4.1 식사하는 철학자 문제
#동시성을 다루는 것은 항상 어렵다….😭
5명의 철학자가 🍝를 드신다.
포크는 5개로 각각의 스파게티
옆에 놓아져 있다.
철학자들은 양손에 포크를 들고
식사 하시는 것을 선호하신다.
그런데 왼쪽 포크를 든 후에
오른쪽 포크를 드는 알고리즘이
설정돼있다면?
23. ⓒ NAVER Connect Foundation 23
4.2 함수형 프로그래밍으로 동시성 문제를 해결할 수 있지는 않을까?
함수형 프로그래밍의
데이터의 불변성, 부수효과가 없음을 이용한다면?
24. ⓒ NAVER Connect Foundation 24
4.2 함수형 프로그래밍으로 동시성 문제를 해결할 수 있지는 않을까?
교착 상태 발생의 주원인은 같은 데이터(포크)를 양쪽의
철학자들이 사용 가능하기 때문이다.
하지만 함수형 프로그래밍에서 사용하는 모든
데이터(포크)가 불변해야한다라는 개념을 지키며 함수를
만든다.
개발자는 철학자들에게 포크를 줄 때 매번 새로운 포크를
철학자들을 줄 수 있다.
25. ⓒ NAVER Connect Foundation 25
4.3 함수형 프로그래밍으로 바라보는 식사하는 철학자 문제
🍴
👩
👱
♂️ 🧔
♀️
👴
🧔
♂️
😺
🍴
철학자들 밥 굶는 건
못 보시는 개발하는
할머니
🍴
🍴
🍴
🍴
26. ⓒ NAVER Connect Foundation
CHAPTER 5.
그래서 왜 함수형 프로그래밍?
개발의 난이도를 줄여보자
27. ⓒ NAVER Connect Foundation 27
5.1 함수형 프로그래밍을 생각해볼만한 상황
• 데이터를 가공할 때 반복되는 복잡한 로직들이 있다.
• 불변성을 지키며 개발해야한다.
• 의미 있는 테스트들을 많이 작성해두어야한다.
• 높은 수준의 추상화가 필요하다.
28. ⓒ NAVER Connect Foundation 28
5.2 소프트웨어 엔지니어링 관점에서 함수형 프로그래밍의 선택
함수들을 조합 -> 재사용성을 높임
순수함수 -> 유지보수를 쉽게
29. ⓒ NAVER Connect Foundation 29
5.3 재미 관점에서 함수형 프로그래밍의 선택
축약해놓은 함수들을 바로바로 사용할 수 있다.
-> 빠른 결과물 확인이 가능하다.
-> 성취감 있게 개발할 수 있다.
30. ⓒ NAVER Connect Foundation 30
참고 자료 및 문헌
참고 문헌 및 출처
- 요즘IT 프로그래밍 패러다임과 반응형 프로그래밍 그리고 RX
- 인프런 유인동님 함수형 프로그래밍 강의
- fxJs 라이브러리
- lodash 라이브러리
- 함수형 자바스크립트 서적-루이스 아텐시오