메소드를 객체 밖으로 빼낸 것이 함수. 즉 함수는 non-oop언어이다.
자바에서 객체소속없이 함수 단독으로 존재할 수 없으므로, 인터페이스를 implements하는 익명구현객체를 생성한다
람다식은 익명함수 객체를 생성한다고 하지만 정확히는 익명구현객체
즉 인터페이스를 구현하는 객체를 생성하는것이 람다식이다.
자바는 람다식을 함수적 인터페이스(매개변수를 가진 코드블록)의 익명 구현객체로 취급
어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있다.
(타입 매개변수) -> {실행문;... };
예 >> (int a) -> {System,out.println(a);}
람다식은 간단한 기능을, 간결하게 구현하기 위해 작성한다.
구현식이 너무 길어지는 코드는 람다식으로 작성하는 의미가 없음.
( ) : 추상메소드의 매개변수 선언블록 그대로 가져옴. 추상메소드의 매개변수 개수만큼 기술.
{ } : 메소드 오버라이딩 하기 위한 실행블록.
표현식은 값을 생성한다. =>> 익명구현객체(타겟타입)
// 아래 두 문장은 같은 결과 출력한다.
fi = () -> {log.info("method call"); };
fi = () -> log.info("method call");
//fi=(int x) -> { //추상메소드의 매개변수 그대로 가져옴.
fi=(x) -> { //매개변수타입 int생략
int result = x * 5;
log.info(result);
}; //람다식으로 타겟타입의 추상메소드 구현-> 익명구현객체 생성
fi = x -> log.info(x*5);
//아래 세 구현식은 모두 같은 결과 출력한다.
//////// 생략조건 2. 매개변수 타입 생략 가능
fi = (x, y) -> {
int result = x+ y;
return result;
};
//////// 생략조건 1. 실행문장 1개일 때 { } 기호 생략 가능
fi = (x, y) -> { return x + y; } ;
//////// 생략조건 4. return 키워드 생략 가능
fi = (x, y) -> x + y;