int max(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
메서드
int printVar(String name, int i) {
System.out.println(name+"="+i)
}
람다식
(name, i) -> System.out.println(name+"="+i)
- 익명객체(이름이 없는 함수)
Object obj = new Object(){
int max(int a, int b) {
return a>b ? a:b
}
}
int value = obj.max(3.5) // 에러 Object 클래스에 max가 없다.
사용을 하기 위해선 함수형 인터페이스(단 하나의 추상메서드만 가져야 함)가 필요
interface MyFunction{
public abstract int max(int a, int b);
}
MyFunction f = new MyFunction(){
public int max(int a, int b) {
return a > b ? a : b
}
} //ok. MyFunction에 max()가 있다.
MyFunction f = (a, b) -> a > b ? a : b
함수형 인터페이스는 객체 생성이 가능하다
- 함수와 메서드의 차이
근본적으로는 동일 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적
- 매개변수가 하나인 경우 괄호() 생략가능(타입이 없을떄만)
- 블록 안의 문장이 하나뿐 일때 괄호{} 생략가능 ; 생략
- 하나뿐인 문장이 return 문이면 괄호{} 생략불가