함수(메서드)를 간단한 식(Expression)으로 표현하는 방법
( a, b ) -> a > b ? a : b
익명 함수(이름이 없는 함수, anonymous function)
( int a, int b ) -> { return a > b ? a : b; }
함수와 메서드의 차이
메서드의 이름과 반환타입을 제거하고 '->'를 블록{}앞에 추가한다.
( int a, int b ) ->{ return a > b ? a : b; }
반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(세미콜론 생략 가능)
( int a, int b ) -> a > b ? a : b
매개변수의 타입이 추론 가능하면 생략 가능(대부분의 경우 생략 가능)
( a, b ) -> a > b ? a : b
매개변수가 하나인 경우, 괄호() 생략가능( 타입이 없을 때만)
a -> a * a //ok 단, 괄호 생략 불가능한 경우도 있다.
블록 안의 문장이 하나뿐 일 때, 괄호{} 생략가능(끝에 세미콜론 생략)
( int i ) -> System.out.println( i )
단, 하나뿐인 문장이 return문이면 괄호{} 생략 불가능
( int a, int b ) -> {return a>b ? a:b;} //ok
( int a, int b ) -> return a>b ? a:b //에러
타입 obj = ( a, b ) -> a > b ? a : b ; //에러, 어떤타입을 넣어야 할까...?
: 함수형 인터페이스로 해결이 가능하다...