함수형 프로그래밍

1급 함수

Java 8에서 스트림, 람다, 메서드 참조가 추가되며 1급 함수를 사용할 수 있게 되었다.

myList.stream() //스트림
		.forEach(s -> System.out.println(s));

Predicate<Student> predicate = s -> s.score >= 70; //람다

//Function<InputType, OutputType>
Function<String, Integer> strToInt = Integer::parseInt; //메서드 참조

고차원 함수

**고차원 함수(higher-order fuction)**란?

하나 이상의 함수를 인수로 받거나, 함수를 결과를 반환하는 함수

고차원 함수 예제 - Function.andThen()

고차원 함수 예제 - Function.andThen()

커링(Currying)

커링은 x와 y라는 두 인수를 받는 함수 f를 한 개의 인수를 받는 g라는 함수로 대체하는 기법이다. 이때 g라는 함수 역시 하나의 인수를 받는 함수를 반환한다. 함수 g와 원래 함수 f가 최종적으로 반환하는 값은 같다. 즉 f(x,y) = (g(x))(y)가 성립한다.

이와 같은 여러 과정이 끝까지 완료되지 않은 상태를 가리켜 '함수가 부분적으로 적용되었다'라고 말한다.

함수적 인터페이스 DoubleUnaryOperator에 커링을 적용한 예제

함수적 인터페이스 DoubleUnaryOperator에 커링을 적용한 예제

curriedConverter는 인수 f, b 두개를 대입하면 인수 한 개를 갖는 변환 함수를 반환한다.

영속 자료구조