람다 표현식
// 이름없는 함수 라고 불린다.
// 함수형 인터페이스랑 연결하여 사용한다.
// 일반 메소드의 매개변수로 사용할 수 있다. // 상당한 장점
// 일반 메소드의 리턴 타입으로 사용할 수 있다.
int max(int a,int b) {
// return a > b ? a : b; // 삼항 연산자 // 1번
// }
//
// (int a,int b) -> {
// return a > b ? a : b; // 2번 //데이터 타입 생략
//
//
//(int a , int b) -> a > b ? a : b // 3번
// 4번 // 매개변수의 타입을 생략
1번을 4번처럼 표현할 수 있다.
( a ) -> a * a == a -> a * a // 매개변수가 하나일 경우엔 괄호도 생략가능
메소드는 기본적으로 호출을 해야하는데 이름없는 함수라 호출을 못해서 사용할 수가 없다.>> 그래서 함수형 인터페이스로 작성했다.1.함수형 인터페이스 작성
>>추상 메소드 하나만 있는 인터페이스를 말한다.
>>메소드에 이름을 부여하기 위해 인터페이스를 작성하는것이다.
(a , b ) -> a > b ? a : b
이런 인터페이스를 만들면
myfuntion f = (a , b ) -> a > b ? a : b;
>> f.max(10,20)
>> int max = f.max(10,20) 이렇게 표기할 수 있다.
함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 합니다.
또한, 다음과 같은 어노테이션(annotation)을 사용하여 함수형 인터페이스임을 명시할 수 있습니다.
@FunctionalInterface
위와 같은 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식.
@FunctionalInterface
interface Calc { // 함수형 인터페이스의 선언
public int min(int x, int y);
}
public class Lambda02 {
public static void main(String[] args){
Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현
System.out.println(minNum.min(3, 4)); // 함수형 인터페이스의 사용
}
}
메소드 참조
메소드참조는 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 해당 람다 표현식에서
불필요한 매개변수를 제거하고 사용할 수 있도록 해줍니다.
메소드 참조를 사용하면 불필요한 매개변수를 제거하고 다음과 같이'::'기호를 사용하여 표현할 수 있습니다.
(base,exponent)->Math.pow(base, exponent);
>> Math::pow;
MyClass obj = new MyClass;
Function<String, Boolean> func = (a) -> obj.equals(a); // 람다 표현식
Function<String, Boolean> func = obj::equals(a); // 메소드 참조
람다 표현식을 사용하는 참고자료
'java' 카테고리의 다른 글
File 클래스 경로,속성 (0) | 2022.05.03 |
---|---|
문자 스트림(Stream)과 파일 입출력 (0) | 2022.05.03 |
자바API클래스(Arrays 클래스) (0) | 2022.04.30 |
스트림(stream) (0) | 2022.04.30 |
멀티 쓰레드(Thread),데몬 쓰레드(deamon thread),쓰레드 그룹 (0) | 2022.04.28 |
댓글