stream에 대해 공부하려고 시작하자마자 람다함수.. 이런 단어에 막혀버렸다. 오늘은 그래서 그게 뭔지 알아보려고 한다.
자바는 원래 oop 언어 (객체지향언어) 인데 jdk1.8부터는 함수형 언어를 몇 가지 추가했다. 빅데이터가 부상하면서 그런 어마어마한 양의 데이터를 처리하기 위한 필요 때문이다. 함수형 언어로는 기본적으로 haskell, erlang, scala가 존재하는데 이 기능을 몇가지 자바, python, js같은 객체지향언어에도 추가가 된 것이다.
그래서 람다식이 무엇인가 하면 함수를 간단한 식으로 표현하기 위한 방법이라고 보면 된다.
int max (int a, int b){
return a > b ? a : b ;
}
이같은 메서드를
//람다식은 기본적으로 익명 함수이다.(anonymous function)
(a,b) -> a > b ? a : b
이렇게 바꿀 수 있는 것이다. 이와 같은 표기법은 자바스크립트에서 화살표 함수를 용어를 알고 있던 사람들이라면 익숙할 것이다.
람다함수.. 그리고 메서드? 이 둘의 용어는 매번 헷갈린다. 과연 이 둘의 차이는 무엇인가.
근본적으로 둘은 동일하다고 볼 수 있다. 하지만, 함수는 일반적 용어이고 메서드는 객체지향적 개념의 용어이다. 함수는 클래스에 종속될 필요가 없고 독립적이다. 하지만, 객체지행적 개념의 메서드는 클래스에 종속되어있다. 따라서, 클래스에 종속되어있는, 클래스 안에서만 존재할 수 있는 함수들을 메서드라고 말하는 것이다. 기본적으로 자바에서는 클래스 밖에 존재할 수 없다. 그렇기 때문에 자바에서는 기본적으로 모두 메서드이다.
(int a, int b) -> {
return a > b ? a : b ;
}
(int a, int b) -> a > b ? a : b
(a, b) -> a > b ? a : b
(a, b) -> a > b ? a : b
(name, i) -> System.out.println(name+"="+i)
x -> xx
int test() {
(int)(Math.random()6);
}
() -> (int)(Math.random()*6)