SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
함수형 사고
@Scala @함수형패러다임 @FP
김정규
regular
Len
https://github.com/LenKIM
@다우기술
RxAndroid 에서 Thread를 관리하는 scheduler를 활용하면서
FP를 잘 안다면 더욱 손쉽게 프로그래밍 할 수 있지 않을까?
+
회사에서 스칼라 프로그래밍을 시킴.
이 책을 읽게된 이유는?
왜? 🤔
객체 지향 ➡ 함수형
패러다임의 전향
왜? 🤔
대표적인 예로
흔히 아는
Garbage Collection 이
일반적인 예제라고 한다.
100마디 말 보다
바로 코딩으로 돌입해보자.
어떤 이름 목록에서, 한 글자로 된 이름을 제외한
모든 이름을 대문자화해서 쉼표로 연결된 문자열을 구해보자!
문제!
Input :
List<String> = List(“starbucks”,”kakao”, “naver”, “a”, “abcMart”, “j”)
Output :
String output = “Startbucks, Kakao, Naver, AbcMart”
public static void main(String[] args) {
ArrayList<String> input = new ArrayList<>();
input.add("startbucks");
input.add("kakako");
input.add("naver");
input.add("a");
input.add("abcMart");
input.add("j");
System.out.println(cleanNames(input));
}
BaseLine Code
어떤 이름 목록에서, 한 글자로 된 이름을 제외한
모든 이름을 대문자화해서 쉼표로 연결된 문자열을 구해보자!
제한시간은 5분!
Output :
String output = “STARBUCKS, KAKAO, NAVER, ABCMART”
정답 공유해주세요.
함수형 프로그래밍에는 공통되게 사용되는 유용한 작업들
일단, 정답 공개는 조금 뒤로 미루고
먼저 함수형 프로그래밍에 대해 조금 더 알아보자.
Map
Filter
Reduce
1. 필터
사용자가 정한 조건으로 목록에 있는 요소들을 필터링 하여 더 작은 목록을 만드는 작업
2. 맵
위 그림처럼 각 요소에 같은 함수를 적용하여 새로운 컬렉션으로 만드는 행위
3. 리듀스
이 함수는 말로 설명하기 보다는 코드 하나로 설명하는게 더 좋다.
3. 리듀스
val a = List(1,2,3,4,5,6,7,8,9,10)
a.reduce((a,b) => { a - b })
그럼 다시 맨 처음 내놨던 문제를 풀어보자!
어떤 이름 목록에서, 한 글자로 된 이름을 제외한
모든 이름을 대문자화해서 쉼표로 연결된 문자열을 구해보자!
문제!
Input
List<String> = List(“starbucks”,”kakao”, “naver”, “a”, “abcMart”, “j”)
Output
String output = “STARBUCKS, KAKAO, NAVER, ABCMART”
제한시간은 5분!
정답!은 라이브 코딩으로...
간결함 / 불필요한 제어가 줄어듬
참고: https://devhue.github.io/blog/functional-programming
반복 처리에서 고계함수(High Order Function)로…
함수를 다루는 함수.
val input = List(1,2,3,4,5)
.map(_*_)
.filter(_ > 10)
val input = List(1,2,3,4,5)
for(a= 0; a < a.length; a++){
int sum = … 중략
}
함수 = 값
지금까지 함수형 패러다임이 좋다는 것은 알겠는데,
어떻게 사고의 전향을 해야될까?
나도 모-르-음
그렇지만, 앞에서 말한 유용한 작업들을 활용해서 끊임없이 연습한다면 가능하다고 판단된다.
이렇게 좋다는 왜 사람들은 FP을 안하는 걸까?
FP의 단점은 뭘까?
참고: https://devhue.github.io/blog/functional-programming
예) List(0.5, 1.0, 1.5) 라는 Input이 있고, 각 사이값을 구해볼까? Output은 List(0.5, 0.5)
끄-읏!
질문 받습니다!
추천 강의 : https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=143

Contenu connexe

Similaire à Functional thinking - 책 리뷰 1탄

파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2destinycs
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3destinycs
 
PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+Minji Yang
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)JiandSon
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking재문 심
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
liftIO 2022 quasiquote
liftIO 2022 quasiquoteliftIO 2022 quasiquote
liftIO 2022 quasiquoteHyunseok Cho
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기NAVER D2
 
0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails민정 김
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilationIkhoon Eom
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8NBT Inc.
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 

Similaire à Functional thinking - 책 리뷰 1탄 (20)

파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
 
PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+PyCon APAC 2016 Regular Expression[A-Z]+
PyCon APAC 2016 Regular Expression[A-Z]+
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
Java.next
Java.nextJava.next
Java.next
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
liftIO 2022 quasiquote
liftIO 2022 quasiquoteliftIO 2022 quasiquote
liftIO 2022 quasiquote
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
0327.web&ruby&rails
0327.web&ruby&rails0327.web&ruby&rails
0327.web&ruby&rails
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilation
 
Regex
RegexRegex
Regex
 
Just java
Just javaJust java
Just java
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 

Plus de Jeong-gyu Kim

근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기Jeong-gyu Kim
 
Api first design 개발의 선순환
Api first design 개발의 선순환Api first design 개발의 선순환
Api first design 개발의 선순환Jeong-gyu Kim
 
Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Jeong-gyu Kim
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)Jeong-gyu Kim
 
얼굴인식 - 기초
얼굴인식 - 기초얼굴인식 - 기초
얼굴인식 - 기초Jeong-gyu Kim
 
02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄Jeong-gyu Kim
 
01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기Jeong-gyu Kim
 
코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 Jeong-gyu Kim
 
Deep dive functional thinking
Deep dive functional thinkingDeep dive functional thinking
Deep dive functional thinkingJeong-gyu Kim
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Jeong-gyu Kim
 
'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나Jeong-gyu Kim
 
Intern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_missionIntern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_missionJeong-gyu Kim
 
Log Parser Story In Python3
Log Parser Story In Python3Log Parser Story In Python3
Log Parser Story In Python3Jeong-gyu Kim
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Jeong-gyu Kim
 

Plus de Jeong-gyu Kim (18)

Id generator
Id generatorId generator
Id generator
 
근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기
 
Api first design 개발의 선순환
Api first design 개발의 선순환Api first design 개발의 선순환
Api first design 개발의 선순환
 
Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)
 
얼굴인식 - 기초
얼굴인식 - 기초얼굴인식 - 기초
얼굴인식 - 기초
 
02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄
 
01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기
 
00.cnn basic
00.cnn basic00.cnn basic
00.cnn basic
 
코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기
 
Deep dive functional thinking
Deep dive functional thinkingDeep dive functional thinking
Deep dive functional thinking
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리
 
'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나'객체지향의 사실과 오해' 북 리뷰 세미나
'객체지향의 사실과 오해' 북 리뷰 세미나
 
Intern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_missionIntern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_mission
 
Log Parser Story In Python3
Log Parser Story In Python3Log Parser Story In Python3
Log Parser Story In Python3
 
Stampfood 2.0
Stampfood 2.0Stampfood 2.0
Stampfood 2.0
 
You dont know_js
You dont know_jsYou dont know_js
You dont know_js
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)
 

Functional thinking - 책 리뷰 1탄