JAVA8 IN ACTION 의 포스팅은 끝났습니다.


이번 포스팅은 지식공유 보다는, 추 후 제가 함수형을 공부하기 위한 용어 및 키워드를 정리합니다.


- 일급함수 


인수로 전달하거나, 결과로 반환하거나, 자료구조에 저장할 수 있는 함수를 말함. 

즉 람다나 메소드 레퍼런스 등 값으로 가질 수 있는 함수를 일급함수라고 정의


- 고차원 함수


여러 함수들을 묶어, 새 기능을 만드는 것을 말함 (comparing, andThen, compose).

즉 람다 조합을 말함



- 커링


함수를 모듈화하는 기법, 함수를 완성시키지 않고 인수를 받아 계속 다른 함수를 만드는 기법이라고 할 수 있다. 


예제


f(x, y, z) = x + y - z 를 다음과 같이 여러 형태로 변형 가능


g(x, y) = f(x, y, 2);

z(x) = f(x, 1, 3);


JAVA8 IN ACTION 에서는 변환요소, 기준치 조정 등을 위해 유용하다고 정리하고 있음


EX. swift 책에서는 커리함수를 파라미터를 받는 함수를 반환하는 함수라 기술.

아래는 커리함수에 대한 예제 (swift).


1
2
3
4
5
6
7
8
9
10
11
func Test () -> (Int-> String {
    return {
        (intValue : Int-> String in
            return String(intValue) + " 함수 커링 샘플 제작"
    }
}
 
print(Test()(5))
 
// PRINT RESULT
// 5 함수 커링 샘플 제작
cs



- 패턴매칭


if-then-else 등을 피하기 위해, 각 분기의 블록을 일급함수화 하여 입력받고, 분기 패턴에 따라 일치하는 일급함수를 실행(언랩)하는 것으로 보입니다.


조건부 연기를 생각하면 쉬울 듯합니다. (JAVA 에서는 아직 지원 안합니다.)



- 영속자료구조


자료구조의 형태는 함수형을 이용해 제작하고, 자료구조 내부를 바꾸지 말라는 원칙. 

의도치 않은 사이드 이펙트를 발생시키고 싶지 않음 -> 참조투명성 원칙.


- 동시성 문제 해결


함수형을 사용하면, 동시성 문제를 해결할 수 있음 (참조투명성 원칙에 의해..)


아래 포스팅 참고.



작년 이 맘 때부터 시작했던 포스팅 했던 JAVA8 의 포스팅이 끝나서 보람이 있네요. :-)

물론 JAVA8 in Action 의 모든 내용을 전문적으로 알고 기억하는 것도 아니지만 나름 뿌듯합니다.


좋은 소식은 현재 직장에서 JDK 버전을 8 로 올려준다는 것입니다. (미래를 내다본 것은 아닌지..)


하지만 안드로이드 개발을 위해 RxJava 및 오픈소스를 계속해야할 것으로 보이고, 곧 새 포스팅할 주제인 IOS-swift 도 보면서 다양한 함수형을 지원하는 언어 활용에 익숙해져 봐야할 것 같습니다.


이상 올 해 목표 중 하나를 끝냅니다.


자바 8 인 액션
국내도서
저자 : 라울-게이브리얼 우르마(RAOUL-GABRIEL URMA),마리오 푸스코(MARIO FUSCO),앨런 마이크로프트(ALAN MYCROFT) / 우정은역
출판 : 한빛미디어 2015.04.01
상세보기



반응형
Posted by N'