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

More Related Content

PDF
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
PDF
系統程式 (習題:Nand2tetris軟體部分)
PDF
Fonctionnalites et performances des cni pour Kubernetes - devops d-day 2018
PPTX
自作LSIコミュニティの可能性
PDF
Pythonが動く仕組み(の概要)
PPTX
IR Framework - AIESEC
PDF
gRPC と nginx による HTTP/2 サービスメッシュ構築
PDF
自然言語処理勉強会11章 情報抽出と知識獲得
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
系統程式 (習題:Nand2tetris軟體部分)
Fonctionnalites et performances des cni pour Kubernetes - devops d-day 2018
自作LSIコミュニティの可能性
Pythonが動く仕組み(の概要)
IR Framework - AIESEC
gRPC と nginx による HTTP/2 サービスメッシュ構築
自然言語処理勉強会11章 情報抽出と知識獲得

What's hot (14)

PDF
RTBにおける機械学習の活用事例
PDF
いまどき(これから)のPHP開発
PDF
C++の黒魔術
PDF
第7回 「眼科救急」
PDF
PEGで構文解析をする
PPTX
How to build lc lc partnerships o-gcdp tier1
PDF
【企画書】anone, / 誰もが性のマイノリティであると診断されるWebサービス
PDF
はじめての生成文法 《後編》
PPTX
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
PPTX
ReactでCMSを作ったときにハマったこと
PPTX
20171005 告白に学ぶ http status code
PDF
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
PDF
用十分鐘快速掌握《數學的整體結構》
PDF
アドテクと機械学習システムの開発@SMN・サンカク・CodeIQワークショップ
RTBにおける機械学習の活用事例
いまどき(これから)のPHP開発
C++の黒魔術
第7回 「眼科救急」
PEGで構文解析をする
How to build lc lc partnerships o-gcdp tier1
【企画書】anone, / 誰もが性のマイノリティであると診断されるWebサービス
はじめての生成文法 《後編》
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
ReactでCMSを作ったときにハマったこと
20171005 告白に学ぶ http status code
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
用十分鐘快速掌握《數學的整體結構》
アドテクと機械学習システムの開発@SMN・サンカク・CodeIQワークショップ
Ad

Similar to [부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍 (20)

PPTX
Functional Programming 01
PDF
함수형 프로그래밍
PPTX
Functional programming
PDF
About Functional Programming Paradigms
PPTX
함수형 프로그래밍
PDF
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
PDF
외계어 스터디 1/5 - Overview
PDF
스칼라와 스파크 영혼의 듀오
PDF
외계어 스터디 2/5 - Expressions & statements
PDF
Pure Function and Honest Design
PDF
Functional Kotlin makes Kotlin functional
PDF
​『함수형 반응형 프로그래밍』 맛보기
PPTX
클로저
PDF
Finding Functional Programming
PDF
Slipp clojure-1212
PDF
[소프트웨어교육] 알고리즘 교사 연수 자료
PDF
클로져 소개 강의 (한국정보통신산업노동조합)
PPTX
Lightning talk - 2
PPTX
생각하는 프로그래밍 1부
PPTX
01. c and time complexity
Functional Programming 01
함수형 프로그래밍
Functional programming
About Functional Programming Paradigms
함수형 프로그래밍
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
외계어 스터디 1/5 - Overview
스칼라와 스파크 영혼의 듀오
외계어 스터디 2/5 - Expressions & statements
Pure Function and Honest Design
Functional Kotlin makes Kotlin functional
​『함수형 반응형 프로그래밍』 맛보기
클로저
Finding Functional Programming
Slipp clojure-1212
[소프트웨어교육] 알고리즘 교사 연수 자료
클로져 소개 강의 (한국정보통신산업노동조합)
Lightning talk - 2
생각하는 프로그래밍 1부
01. c and time complexity
Ad

More from CONNECT FOUNDATION (20)

PDF
부스트캠프 웹・모바일 8기 설명회 (2023년)
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
PDF
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
PDF
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
PDF
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
PDF
부스트캠프 웹∙모바일 7기 설명회
PDF
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
PDF
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
PDF
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
PDF
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
PDF
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
PDF
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
PDF
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기
부스트캠프 웹・모바일 8기 설명회 (2023년)
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
부스트캠프 웹∙모바일 7기 설명회
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기

[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍

  • 1. ⓒ NAVER Connect Foundation 너와 나의 함수형 프로그래밍🔗 발표자: 김지원
  • 2. ⓒ NAVER Connect Foundation 1. 함수형 프로그래밍이란? 2. 일급이란? 3. 예제를 통해 살펴보는 함수형 프로그래밍 4. 동시성 프로그래밍 5. 그래서 왜 함수형 프로그래밍? 2
  • 3. ⓒ NAVER Connect Foundation CHAPTER 1. 함수형 프로그래밍이란? 함수형 프로그래밍의 키워드들
  • 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 그래서 함수형 프로그래밍이란? 함수형 프로그래밍 선언형으로 함수의 결과가 무엇인지에 집중하고 순수함수들을 만들어 이들을 조합하며 기능을 구현하는 것
  • 13. ⓒ NAVER Connect Foundation CHAPTER 2. 일급이란? 함수를 값으로 바라보자
  • 14. ⓒ NAVER Connect Foundation 변수에 담을 수 있다. 14 2.1 일급이란 무엇일까? 인자로 전할 수 있다. 리턴값으로 전할 수 있다. 일급이란?
  • 15. ⓒ NAVER Connect Foundation 15 2.2 함수도 일급이다. 함수도 일급이기 때문에 인자, 변수, 리턴으로 다룰 수 있다.
  • 16. ⓒ NAVER Connect Foundation CHAPTER 3. 예제로 알아보는 함수형 프로그래밍 함수들을 조합하는 코드들을 살펴보자
  • 17. ⓒ NAVER Connect Foundation 17 3.0 예제 전에… 예제 시작 전에 짚고 넘어갈 코드들
  • 18. ⓒ NAVER Connect Foundation 18 3.1 합성함수 예제 1 : 어딘지 익숙한 합성함수 꼴
  • 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 라이브러리 - 함수형 자바스크립트 서적-루이스 아텐시오
  • 31. ⓒ NAVER Connect Foundation End of Document Thank You.