기술이 발전되어 가면서 커져만 가는 데이터를 처리한 방법을 필요로했고 이를 필요로 하는 CPU 의 성능 향상이 필요하게 되었다.
이후 CPU에 멀티 코어가 등장하게 되면서 모든 데이터를 빠르게 처리하기 위해 모든 코어를 동원할 수 있는 기술을 개발하게된다.
그렇게 JAVA 8
에서 새롭게 등장한 병렬화
개념이 등장했고 동시에 Collection (Map / Set / List)
가 더욱 강화 되었다.
이러한 컬렉션 기능을 더욱 효울적으로 사용하기 위해 등장한 함수형 프로그래밍
이 오늘의 주제인 Lambda
인 것이다.
스프링을 위한 자바 객체 지향의 원리와 이해
에서 정의한 람다식 이란?
코드 블록을 위해 메서드를, 메서드를 사용하기 위해 익명 객체
를 만드는 복잡함을 줄이고
코드 블록
자체를 메서드의 인자나 반환값으로 사용하기 위한 수학적으로 단순화 시킨 표현방법
으로 정의한다.
자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
즉, 문제를 해결하기 위한 함수를 작성하여 가독성과 유지보수의 장점을 취하는 프로그래밍 방법이다.
익명함수(Anonymous Function)
함수의 이름이 없는 함수로, 익명함수들은 모두 1급 객체이다.
- 변수나 데이터 구조 안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값으로 사용할 수 있다.
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.
함수형 프로그래밍
, 함수형 패러다임
의 등장에 따라 등장@FunctionalInterface
interface MyLambdaFunction {
int max(int a, int b); // 출력 -> 5
}
public class Lambda {
public static void main(String[] args) {
// 람다식을 이용한 익명함수
MyLambdaFunction lambda = (int a, int b) -> a > b ? a : b;
System.out.println(lambda.max(3, 5));
}
}
invokedynamic
을 사용하여 Lambda 표현식 구현을 위한 코드 생성을 런타임 시 까지 연기이번 포스팅에서 람다
와 함수형 프로그래밍
에 대해 포스팅했다.
이 두가지를 이해하는 것으로 많은 곳에 적용할 수 있지만
최종적으로 자바의 Stream
을 사용하기 위해 이 두가지 기능을 이해해야한다.