ݺߣ

ݺߣShare a Scribd company logo
함수형 사고
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

함수형사고 3장 양도하라