함수형사고 3장 양도하라

21
함수형 사고 3양도하라

Upload: sung-gon-song

Post on 13-Jan-2017

82 views

Category:

Software


1 download

TRANSCRIPT

Page 1: 함수형사고 3장 양도하라

함수형 사고3장 양도하라

Page 2: 함수형사고 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/

Page 3: 함수형사고 3장 양도하라

클로저(Closure)

클로저(closure)란 그 내부에서 참조되는 모든 인수에 대한 묵시적 바인딩을 지닌 함수를 지칭한다.

이 함수는 자신이 참조하는 것들의 문맥(context)을 포함한다.

Page 4: 함수형사고 3장 양도하라

클로저(Closure) - 예제

Groovy eclipse plugin : https://github.com/groovy/groovy-eclipse/wiki

Create a new Groovy class : File ▸ New ▸ Other ▸ Groovy ▸ Groovy Class.

Page 5: 함수형사고 3장 양도하라

클로저(Closure)

● 언어로 하여금 상태를 관리하게 하라● 지연 실행 : 클로저 블록에 코드를 바인딩하게하고 그 블록의 실행을 나중으로 연기

Page 6: 함수형사고 3장 양도하라

커링과 부분 적용 - 정의와 차이점

● 커링(currying) : 다인수 함수를 일인수 함수들의 체인으로 바꿔주는 방법● 부분적용(partial application) : 주어진 다인수 함수를 생략될 인수의 값을 미리 정해서 더 적은수의 인수를 받는 하나의 함수로 변형하는 방법

Page 7: 함수형사고 3장 양도하라

커링과 부분 적용 - 그루비

Page 8: 함수형사고 3장 양도하라

커링과 부분 적용 - 그루비

Page 9: 함수형사고 3장 양도하라

커링과 부분 적용 - 그루비

Page 10: 함수형사고 3장 양도하라

커링과 부분 적용 - 클로저

Page 11: 함수형사고 3장 양도하라

스칼라 커링

Page 12: 함수형사고 3장 양도하라

스칼라 부분 적용

Page 13: 함수형사고 3장 양도하라

커링과 부분 적용 - 스칼라

Page 14: 함수형사고 3장 양도하라

스칼라 부분함수

Page 15: 함수형사고 3장 양도하라

스칼라 부분함수

Page 16: 함수형사고 3장 양도하라

커링과 부분 적용 - 보편적 용례

커링/부분적용은 객체지향 언어에서 팩토리 함수를 구현할 상황에 사용

Page 17: 함수형사고 3장 양도하라

색인을 사용한 목록 순회

Page 18: 함수형사고 3장 양도하라

재귀를 이용한 목록 순회

재귀는 상태

관리를

런타임에

양도할수 있게 해준다.

Page 19: 함수형사고 3장 양도하라

그루비 재귀

Page 20: 함수형사고 3장 양도하라

스칼라 재귀

스택 증가 -> 스택오버플로우

대안 : 꼬리 호출 최적화

재귀 호출이 함수에서 마지막 단계이면 런타임이 스택을 증가시키지 않고 결과를 교체

얼랭은 스택증가없이 재귀를 구현

Page 21: 함수형사고 3장 양도하라

스트림과 작업 재정렬

영리한 런타임은 게으른 작업(map, filter)들을 재정렬 함