SlideShare a Scribd company logo
1 of 21
Download to read offline
함수형 사고
3장 양도하라
반복 처리에서 고계함수로
● 효율적으로 일하기 위해서 추상단계에 의존한다.
● But, 사용하는 추상단계보다 한 단계 아래를 이해하라.
○ Stream API를 사용할 때 그 아래 포크/조인라이브러리를 이해해야 좋은 성능을 낼 수 있다.
Java 8 Stream API - fork & join framework 참조 : http://www.popit.kr/java8-stream%EC%9D%98-parallel-%EC%B2%98%EB%A6%AC/
클로저(Closure)
클로저(closure)란 그 내부에서 참조되는 모든 인수에 대한 묵시적
바인딩을 지닌 함수를 지칭한다.
이 함수는 자신이 참조하는 것들의 문맥(context)을 포함한다.
클로저(Closure) - 예제
Groovy eclipse plugin : https://github.com/groovy/groovy-eclipse/wiki
Create a new Groovy class : File ▸ New ▸ Other ▸ Groovy ▸ Groovy Class.
클로저(Closure)
● 언어로 하여금 상태를 관리하게 하라
● 지연 실행 : 클로저 블록에 코드를 바인딩하게하고 그 블록의 실행을 나중으로
연기
커링과 부분 적용 - 정의와 차이점
● 커링(currying) : 다인수 함수를 일인수 함수들의 체인으로 바꿔주는 방법
● 부분적용(partial application) : 주어진 다인수 함수를 생략될 인수의 값을 미리
정해서 더 적은수의 인수를 받는 하나의 함수로 변형하는 방법
커링과 부분 적용 - 그루비
커링과 부분 적용 - 그루비
커링과 부분 적용 - 그루비
커링과 부분 적용 - 클로저
스칼라 커링
스칼라 부분 적용
커링과 부분 적용 - 스칼라
스칼라 부분함수
스칼라 부분함수
커링과 부분 적용 - 보편적 용례
커링/부분적용은 객체지향 언어에서 팩토리
함수를 구현할 상황에 사용
색인을 사용한 목록 순회
재귀를 이용한 목록 순회
재귀는 상태
관리를
런타임에
양도할수 있게
해준다.
그루비 재귀
스칼라 재귀
스택 증가 -> 스택오버플로우
대안 : 꼬리 호출 최적화
재귀 호출이 함수에서 마지막
단계이면 런타임이 스택을
증가시키지 않고 결과를 교체
얼랭은 스택증가없이 재귀를
구현
스트림과 작업 재정렬
영리한 런타임은 게으른 작업
(map, filter)들을 재정렬 함

More Related Content

What's hot

Smc–state machinecompiler
Smc–state machinecompilerSmc–state machinecompiler
Smc–state machinecompiler
Dong Hyeun Lee
 
Spin locks 추가 자료
Spin locks 추가 자료Spin locks 추가 자료
Spin locks 추가 자료
codevania
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
destinycs
 

What's hot (20)

7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기
 
Smc–state machinecompiler
Smc–state machinecompilerSmc–state machinecompiler
Smc–state machinecompiler
 
Spin locks 추가 자료
Spin locks 추가 자료Spin locks 추가 자료
Spin locks 추가 자료
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
Node week1
Node week1Node week1
Node week1
 
Multi-thread : producer - consumer
Multi-thread : producer - consumerMulti-thread : producer - consumer
Multi-thread : producer - consumer
 
ES6-01
ES6-01ES6-01
ES6-01
 
javascript01
javascript01javascript01
javascript01
 
2017년 javascript의 현재주소
2017년 javascript의 현재주소2017년 javascript의 현재주소
2017년 javascript의 현재주소
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)
 
Event Loop - Java Script
Event Loop - Java ScriptEvent Loop - Java Script
Event Loop - Java Script
 
Effective Java ~
Effective Java ~Effective Java ~
Effective Java ~
 
Multitasking on DB and Django
Multitasking on DB and DjangoMultitasking on DB and Django
Multitasking on DB and Django
 
[ES6] 1. let과 const
[ES6] 1. let과 const[ES6] 1. let과 const
[ES6] 1. let과 const
 
분산 트랜잭션 - 큰힘에는 큰 책임이 따른다 [MongoDB]
분산 트랜잭션 - 큰힘에는 큰 책임이 따른다 [MongoDB]분산 트랜잭션 - 큰힘에는 큰 책임이 따른다 [MongoDB]
분산 트랜잭션 - 큰힘에는 큰 책임이 따른다 [MongoDB]
 
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
 
Django에서 websocket을 사용하는 방법
Django에서 websocket을 사용하는 방법Django에서 websocket을 사용하는 방법
Django에서 websocket을 사용하는 방법
 
Clean code(06)
Clean code(06)Clean code(06)
Clean code(06)
 

Viewers also liked

Viewers also liked (13)

함수형사고 실용적사고
함수형사고 실용적사고함수형사고 실용적사고
함수형사고 실용적사고
 
Ddd start 10장
Ddd start 10장Ddd start 10장
Ddd start 10장
 
DDD start 1장
DDD start 1장DDD start 1장
DDD start 1장
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
Bounded Context
Bounded ContextBounded Context
Bounded Context
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 

Similar to 함수형사고 3장 양도하라

Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
sys4u
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
codenavy
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
NAVER D2
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2
YoungSu Son
 

Similar to 함수형사고 3장 양도하라 (20)

Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
 
Flyweight
FlyweightFlyweight
Flyweight
 
Swift 3 Programming for iOS : Closure
Swift 3 Programming for iOS  : ClosureSwift 3 Programming for iOS  : Closure
Swift 3 Programming for iOS : Closure
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functional
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
Kubernetes in action
Kubernetes in actionKubernetes in action
Kubernetes in action
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 

More from Sunggon Song

More from Sunggon Song (9)

K8s in action chap15
K8s in action chap15K8s in action chap15
K8s in action chap15
 
랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션랜덤Walks, 몬테카를로 시뮬레이션
랜덤Walks, 몬테카를로 시뮬레이션
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learning
 
서포트 벡터머신
서포트 벡터머신서포트 벡터머신
서포트 벡터머신
 
대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크대칭가중치와 심층신뢰네트워크
대칭가중치와 심층신뢰네트워크
 
데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝데이터처리와 통계 기본 머신러닝
데이터처리와 통계 기본 머신러닝
 
합성곱 신경망
합성곱 신경망합성곱 신경망
합성곱 신경망
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장
 

함수형사고 3장 양도하라